AlertDialog - 不要忽略项目点击

Ton*_*ony 12 android android-alertdialog

好吧我正在创建一个ArrayAdapter并在我的Alert Dialog中使用它,因为我不想在SingleItemSelection对话框中显示默认的单选按钮.

相反,我想要更改所选项目的背景,然后当用户按下肯定按钮时,我将执行与所选项目相关的操作.

    private void showAlertDialog()
    {
        final String[] options = getResources().getStringArray(R.array.dialog_options);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, options);

        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.setTitle("My Dialog");

        dialogBuilder.setAdapter(adapter, new OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                Toast.makeText(getApplicationContext(), "item clicked at index " + which, Toast.LENGTH_LONG).show();
// Here I need to change the background color of the item selected and prevent the dialog from being dismissed
            }
        });

        //String strOkay = getString(R.string.okay);
        dialogBuilder.setPositiveButton("OK", null); // TODO
        dialogBuilder.setNegativeButton("Cancel", null); // nothing simply dismiss

        AlertDialog dialog = dialogBuilder.create();
        dialog.show();
    }
Run Code Online (Sandbox Code Playgroud)

我正在努力解决两个问题.

如何在用户单击项目时阻止对话框被解除

如何更改用户单击时所选项目的背景

Chu*_*pik 19

若要防止对话框关闭项目单击,您可以使用AdapterView .OnItemClickListener而不是DialogInterface .OnClickListener.

像这样:

dialogBuilder.setAdapter(adapter, null);
...
AlertDialog dialog = dialogBuilder.create();
alertDialog.getListView().setOnItemClickListener(
new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// do your stuff here
}
});
Run Code Online (Sandbox Code Playgroud)


Vla*_*ich 9

  1. 您可以将自定义ListView设置为AlertDialog的内容并设置OnItemClickListener

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    String[] items = ...;
    ListView list = new ListView(this);
    list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.select_dialog_item, items));
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View view, int pos, long id) {
                ...
            }
        });
    builder.setView(list);
    
    Run Code Online (Sandbox Code Playgroud)

    然后保存对话框的引用

    mDialog = builder.show();
    
    Run Code Online (Sandbox Code Playgroud)

    为了在必要时解雇它

    mDialog.dismiss();
    
    Run Code Online (Sandbox Code Playgroud)