Я пытаюсь вернуть результат фрагмента диалога в мой класс обработчика, чтобы я мог отобразить результаты в своем фрагменте с привязкой данных. Я следовал примеру, предоставленному 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 и передать контекст через конструктор.