Инстанцирующий слушатель в диалоге - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь вернуть результат фрагмента диалога в мой класс обработчика, чтобы я мог отобразить результаты в своем фрагменте с привязкой данных. Я следовал примеру, предоставленному Android dev docs .

Приложение будет обрабатывать sh, когда код попытается инстанцировать слушателя в блоке попытки и захвата onAttach. Я считаю, что это потому, что я использую пользовательский класс обработчика вместо фрагмента или действия, чтобы запустить фрагмент диалога.

DialogFragment, использует NumberPicker для выбора номера.

public class MyDialogFragment extendds DialogFragment {
    public interface MyDialogListener {
        public void onPositiveClick(int numberSelected);
    }

    MyDialogListener listener;

    @Overrice
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            // My problem is here
            listener = (MyDialogListener) context;
        } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + "must implement MyListener");
        }
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

        NumberPicker numberPicker = new NumberPicker(getActivity());

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle("Number selection")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        numberPickerListener.selectedNumber(numberPicker.getValue());
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d(TAG, "onClick: onClickNegative");
                }
             });
         builder.setView(numberPicker);
         return builder.create();
    }
}

Класс-обработчик, этот класс обрабатывает все мои методы onClick с привязкой данных.

public class MyHandler extends BaseObservable implements MyDialogFragment.MyDialogListener {
    ...
    @Override
    public void onPositiveClick(int numberSelected) {
        Logd(TAG, "selected Number:" + numberSelected);
    }
}

Я также попытался изменить контекст слушателя с помощью getContext, getActivity и передать контекст через конструктор.

...