Android:监听自定义DialogFragment中的PositiveButton点击

Android: Listen to PositiveButton click in custom DialogFragment

我正在创建一个自定义 AlertDialog 来获取这样的项目列表...

对话框片段:

public class MultiListDialog extends DialogFragment {
    private ArrayList<Integer> selectedItems = new ArrayList<>();

    public MultiListDialog newInstance(Bundle args) {
        MultiListDialog d = new MultiListDialog();
        d.setArguments(args);
        return d;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        selectedItems = new ArrayList();
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        builder.setTitle(getArguments().getString("title", ""))
                .setMultiChoiceItems(getArguments().getCharSequenceArray("list"), null, new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                                if (isChecked) {
                                    selectedItems.add(which);
                                } else if (selectedItems.contains(which)) {
                                    selectedItems.remove(Integer.valueOf(which));
                                }
                            }
                        })
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int i) {

                    }
                })
                .setNegativeButton(R.string.cancel_only, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int i) {
                        dialog.cancel();
                    }
                });

        return builder.create();
    }


    public ArrayList<String> getSelectedItems() {
        ArrayList<String> ret = new ArrayList<>();
        for (int i=0; i<selectedItems.size(); i++)
            ret.add(getArguments().getCharSequenceArray("list")[i].toString());

        return ret;
    }
}

Activity:

Bundle args = new Bundle();
                        args.putString("title", "My Title");
                        args.putCharSequenceArray("list", arrayList.toArray(new CharSequence[arrayList.size()]));

                        DialogFragment fragment = new MultiListDialog().newInstance(args);
                        fragment.show(getFragmentManager(), "my_frag");

我怎样才能在单击“确定”时检索选定的项目?我尝试添加接口和抽象函数,但无法正常工作。

可以使用DialogFragment#getActivity()方法并将其转换为您的收听界面。您也可以将 activity 作为侦听器传递给对话片段,并在 onDestroy()

内将其设为 null