在对话框片段中实例化侦听器

问题描述 投票:0回答:1

我正在尝试将对话框片段的结果返回到我的处理程序类,以便可以通过数据绑定在片段中显示结果。我遵循了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 android-alertdialog listener
1个回答
0
投票

这在Android开发文档中有效,因为启动DialogFragment的Activity实现了Listener接口。这个演员对他们来说是成功的listener = (MyDialogListener) context;

您启动对话框表单customHandler,但是无论如何您都需要supportFragmentManager。谁为您提供?找到此Activity或Fragment并在那里实现MyDialogListener

© www.soinside.com 2019 - 2024. All rights reserved.