Andreas W.
Andreas W.

Reputation: 13

Buttons in Custom Dialog won't respond

I'm trying to create a custom dialog for the settings of my application, the problem is, that the custom buttons, EditText & the spinner don't respond to user activity. I hope someone can help. Here is my Code:

public class SettingsDialog extends DialogFragment  {
private EditText editText;
private Spinner ipSpinner;
private MainActivity mainActivity;
private Settings settings;
private int selectedIP;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.dialog_settings, null);
    mainActivity = (MainActivity) getActivity();
    settings = mainActivity.getSettings();
    selectedIP = settings.getSelectedIP();
    editText = (EditText) dialogView.findViewById(R.id.edit_text_ip);
    ipSpinner = (Spinner) dialogView.findViewById(R.id.spinner_ip);
    ImageButton imageButton = (ImageButton) dialogView.findViewById(R.id.image_button_save_ip);
    imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String IP = editText.getText().toString();
            settings.setIP(selectedIP, IP);
            settings.settingsSave();
            mainActivity.showToast("IP at " + Integer.toString(selectedIP) + " with value" + IP);
        }
    });
    ipSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            selectedIP = position;
            editText.setText(settings.getIP(selectedIP));
            mainActivity.showToast(Integer.toString(position));
            settings.settingsSave();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            return;
        }

    });
    builder.setView(inflater.inflate(R.layout.dialog_settings, null))

            .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    String IP = editText.getText().toString();
                    settings.setIP(selectedIP, IP);
                    settings.settingsSave();
                    mainActivity.showToast("IP at " + Integer.toString(selectedIP) + " with value" + IP);
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    SettingsDialog.this.getDialog().cancel();
                }
            });
    return builder.create();
}

}

and my xml for the dialog:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="IP-address"
    android:textAllCaps="true" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Spinner
        android:id="@+id/spinner_ip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:entries="@array/spinner_ip_visual"
        android:entryValues="@array/spinner_ip_values" />

    <EditText
        android:id="@+id/edit_text_ip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="8" />

    <ImageButton
        android:id="@+id/image_button_save_ip"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@null"
        android:src="@drawable/ic_done_black_24dp"/>
</LinearLayout>


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="unit"
    android:textAllCaps="true" />

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <RadioButton
        android:id="@+id/button_unit_celsius"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Celsius"
        android:textAllCaps="true" />

    <RadioButton
        android:id="@+id/button_unit_fahrenheit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Fahrenheit"
        android:textAllCaps="true" />
</RadioGroup>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onButtonClickGenerateRandomData"
    android:text="Generate random data"
    android:textAllCaps="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onButtonClickDropDatabase"
    android:text="delete weatherdata"
    android:textAllCaps="true" />

Thanks in advice

Upvotes: 0

Views: 55

Answers (1)

Inkognito
Inkognito

Reputation: 224

You are inflating dialogView and then you set listeners for the views that are in dialogView, however when you set the view for dialog builder, you inflate the new view.

This is wrong.

 builder.setView(inflater.inflate(R.layout.dialog_settings, null))

This is correct

 builder.setView(dialogView)

Upvotes: 2

Related Questions