Настройка слушателя в Activity для DialogFragment - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь реализовать прослушиватель в моей Activity на моем DialogFragment (который имеет 3 элемента виджета numberPicker), который будет использоваться для установки значений в textViews Activity, и я не хочу делать этот класс Fragment внутренним классом Активности и установите просмотр текста в OnClickListener кнопки ОК, так как мне придется сделать мой взгляд статичным в том случае, который не желателен. Я знаю, что есть прослушиватель onValueChange класса NumberPicker, но как мне установить прослушиватель, который получает значения из 3 элементов выбора. Буду признателен за любую помощь по внедрению такого слушателя в упражнении.

 public class PickerDialog extends DialogFragment {
        NumberPicker numberPicker;
        NumberPicker numberPicker2;
        NumberPicker numberPicker3;
        public static PickerDialog newInstance() {
            PickerDialog frag = new PickerDialog ();
            return frag;
        }


        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            View child = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
             numberPicker = child.findViewById(R.id.numberPicker1);
              numberPicker2 = child.findViewById(R.id.numberPicker2);
               numberPicker3 = child.findViewById(R.id.numberPicker3);

            numberPicker.setMinValue(0);
            numberPicker.setMaxValue(59);
            numberPicker3.setMinValue(0);
            numberPicker3.setMaxValue(59);

            numberPicker2.setMinValue(0);
            numberPicker2.setMaxValue(59);

            AlertDialog.Builder builder;
            builder = new AlertDialog.Builder(getActivity(), R.style.Theme_Material_Dialog_Alert);


            builder.setTitle("Choose Value");


            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                    dismiss();
                }
            });

            builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dismiss();

                }
            });

            builder.setView(child);
            return builder.create();
        }




    }

1 Ответ

0 голосов
/ 30 июня 2019

Вы можете создать интерфейс Listener, который будет реализован в вашей деятельности и используется в DialogFragment посредством ссылки на операцию.Что-то вроде:

public class MyActivity extends Activity implements NumberPickerListener {
    ...
    @Override
    public void onValuesPicked(int first, int second, int third) {
        //Do work here.
    }
    ...
}

Интерфейс:

interface NumberPickerLisener {
    void onValuesPicked(int first, int second, int third);
}

В вашем фрагменте:

public class PickerDialog extends DialogFragment {

    NumberPickerListener listener;

    ...

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View child = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
        listener = (MyActivity)getActivity();

        ...

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                listener.onValuesPicked(numberPicker.getValue(), numberPicker2.getValue(), numberPicker3.getValue());
                dismiss();
            }
        });

        ...
    }




}
...