防止带有列表的对话框在选择后关闭。

3

我有一个包含项目列表的对话框片段。默认情况下,当您触摸项目时,对话框会关闭。如何在此时防止对话框关闭?(我想在稍后的阶段以编程方式关闭对话框)

我正在按照这里指示的代码示例进行操作:https://developer.android.com/guide/topics/ui/dialogs.html

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(R.string.pick_color)
           .setItems(R.array.colors_array, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int which) {
           }
    });
    return builder.create();
}

我看到有一个选项可以使用builder.setSingleChoiceItems而不是builder.setItems(),这将给我想要的行为,但不是我想要的样式。(它带有单选按钮,我不想要)

不是重复的问题,我已经尝试过使用.setSingleChoiceItems,但它给出了错误的样式。 - Scott Ferguson
抱歉,请重新用清晰的语言表达您的问题和标题。类似于“当使用setSingleChoiceItems时,如何在对话框上设置样式?我会移除重复标志。” - tir38
@Scott Ferguson,你找到解决方法了吗?我有同样的问题。 - seekingStillness
2个回答

5

创建对话框后,在ListView上设置监听器,如下所示:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final AlertDialog dialog = builder.setTitle("My dialog")
            .setItems(new String[]{"Do nothing...", "Dismiss!"}, null) // any listener will do!
            .create();

    // add this listener after dialog creation to stop auto dismiss on selection
    AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            switch(position) {
                case 0:
                    // do nothing selected
                    break;
                case 1:
                    // dismiss selected
                    dialog.dismiss();
                    break;
            }
        }
    };
    dialog.getListView().setOnItemClickListener(listener);
    return dialog;
}

啊,终于解决了!这个问题困扰我多年。 - Ivan Todorović

0

我认为你应该使用DialogFragment的setItems方法,提供选项列表,但不要提供一个onClickListener实例,而是提供null。具体来说:

.setItems(R.array.colors_array, null);

您可以随意稍后关闭对话框。


4
只要对话框不关闭,它就能正常工作,但我仍然需要在项目点击时执行一个操作,因此将onClick监听器设置为null对我来说不是一个选项。 - Scott Ferguson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接