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获取完整示例
标签:android,listview,alertdialog,selecteditem 来源: https://codeday.me/bug/20190713/1446487.html