如何在选择项目时阻止对话框关闭

时间:2014-04-30 20:09:53

标签: android onclicklistener android-alertdialog dismiss

我有一个包含项目的对话框:

final String[] items = new String[] { "item1", "item2" };

AlertDialog.Builder adb = new AlertDialog.Builder(this).setTitle("Title");
adb.setCancelable(false);
adb.setItems(items, new OnClickListener() {

    @Override
    public void onClick(DialogInterface d, int n) {
        Toast.makeText(MainActivity.this, items[n], Toast.LENGTH_LONG).show();
    });
}

AlertDialog alert = adb.create();
alert.setCancelable(false);
alert.show();

选择项目后,会显示Toast并关闭对话框。我怎么能禁用它? 我希望在选择一个项目后对话框仍然保持打开状态。

3 个答案:

答案 0 :(得分:2)

您正在使用AlertDialog.Builder.setItems()方法,在单击某个项目时会取消对话框。

为了显示项目列表而没有关闭对话框,您应该使用setSingleChoiceItems()方法的重载之一:

  

设置要在对话框中显示的项目列表作为内容,您将通过提供的监听器通知您所选项目。该列表将在选中项目的文本右侧显示一个复选标记。 单击列表中的项目不会忽略该对话框。单击按钮将关闭对话框。

答案 1 :(得分:0)

将setItems方法中的第二个参数设置为null并将项目侦听器附加到对话框的一部分的列表视图中:

var alertDialog: AlertDialog? = null
val builder = AlertDialog.Builder(context!!, R.style.alertDialogTheme)
    .setItems(items.toTypedArray(), null)
    .setTitle("My Dialog Title")
    .setPositiveButton(
        "OK"
    ) { dialog, id ->
        dialog.dismiss()
    }.setNegativeButton(
        "Cancel"
    ) { dialog, id ->
        dialog.dismiss()
    }

alertDialog = builder.show()
alertDialog.listView.setOnItemClickListener(object: AdapterView.OnItemClickListener {
    override fun onItemClick(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
        // Do something with item click.
    }
})
alertDialog.setCancelable(false)

答案 2 :(得分:0)

我使用两种方法。第一个是最简单的,第二个与上述@AndroidDev的答案相同。

第一个

builder.setItems(items, (dialogInterface, n) -> {
        if(n == 0){
            builder.show();
            Toast.makeText(MainActivity.this, items[n], Toast.LENGTH_LONG).show();
        }
    });

第二个: (与上述代码相同,但与Java8 lambda相同)

AlertDialog dialog = builder.create();
    dialog.getListView().setOnItemClickListener((adapterView, subview, i, l)->{

    });