我有一个包含项目的对话框:
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
并关闭对话框。我怎么能禁用它?
我希望在选择一个项目后对话框仍然保持打开状态。
答案 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)->{
});