Android:在AlertDialog中的多选ListView中选择项目

我是Android开发的新手,并且在如何选择由alertdialog托管的列表视图中的某些项目时苦苦挣扎.在下面的代码中,lv.setItemChecked不起作用,因为listview尚未生成,所以我想知道是否有任何ListView或AlertDialog事件确认已生成视图.

String [] values = {"a","b","c"};

ArrayAdapter<String> adp = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice, values);

ListView lv = new ListView(this);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setOnItemClickListener(this);
lv.setAdapter(adp);

AlertDialog.Builder bldr = new AlertDialog.Builder(this);
bldr.setTitle("Select");
bldr.setView(lv);
bldr.setPositiveButton("Done",
    new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handleDone();
        }
    });
bldr.setNegativeButton("Cancel",
    new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handleCancel();
        }
    });

final Dialog dlg = bldr.create();
dlg.show();

没关系,我明白了.我在lv.setAdapter()调用之后立即调用lv.setItemChecked(0,true).一旦我在dlg.show()之后移动它,它就像一个魅力.

解决方法:

public class DialogoSeleccion extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

 final String[] items = {"Español", "Inglés", "Francés"};

    AlertDialog.Builder builder =
            new AlertDialog.Builder(getActivity());

    builder.setTitle("Selección")
       .setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Log.i("Dialogos", "Opción elegida: " + items[item]);
            }
        });

    return builder.create();
}
}

你会得到这样的东西:

如果要记住或显示最后选择的项,只需更改set setSingleChoiceItems()或setMultiChiceItems()的setItems方法.使用setSingleChoiceItems()很简单,只需传递其他参数(设置选择的索引,如果你不想设置,传递-1):

builder.setTitle("Selección")
  .setSingleChoiceItems(items, -1,
           new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            Log.i("Dialogos", "Opción elegida: " + items[item]);
        }

    });

使用上面的代码片段,您将拥有类似的内容

如果你想要一个multichoose,你应该改变方法,第二个参数现在不是一个整数,应该是一个布尔数组,通过这种方式你将设置id任何选项是否启用:

builder.setTitle("Selección")
.setMultiChoiceItems(items, null,
    new DialogInterface.OnMultiChoiceClickListener() {
    public void onClick(DialogInterface dialog, int item, boolean isChecked) {
         Log.i("Dialogos", "Opción elegida: " + items[item]);
   }
});

结果将是这样的:

调用任何thre示例的方法是:

FragmentManager fragmentManager = getSupportFragmentManager();
    DialogoSeleccion dialogo = new DialogoSeleccion();
    dialogo.show(fragmentManager, "tagSeleccion");

如果您了解西班牙语,本指南将为您提供帮助:Complete guide for AlertDialogs或在GitHub获取完整示例

上一篇:如何使用Selenium WebDriver和Python获取选定的选项?


下一篇:Kendo UI Grid-如何在KendoUI中获取选定行的值