我正在尝试将对话框片段的结果返回到我的处理程序类,以便可以通过数据绑定在片段中显示结果。我遵循了Android dev docs提供的示例。
当代码尝试实例化onAttach try and catch块中的侦听器时,应用程序将崩溃。我相信这是因为我使用的是自定义处理程序类,而不是使用Fragment或Activity来启动Dialog Fragment。
DialogFragment,使用数字选择器选择一个数字。
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();
}
}
Handler类,此类通过数据绑定处理我所有的onClick方法。
public class MyHandler extends BaseObservable implements MyDialogFragment.MyDialogListener {
...
@Override
public void onPositiveClick(int numberSelected) {
Logd(TAG, "selected Number:" + numberSelected);
}
}
我还尝试使用getContext,getActivity更改侦听器的上下文,并将上下文传递给构造函数。
这在Android开发文档中有效,因为启动DialogFragment的Activity实现了Listener接口。这个演员对他们来说是成功的listener = (MyDialogListener) context;
您启动对话框表单customHandler,但是无论如何您都需要supportFragmentManager。谁为您提供?找到此Activity或Fragment并在那里实现MyDialogListener