[英]Multichoice AlertDialog get selected values as Strings
我从服务器获得一个List
,该List
在MultiChoice AlertDialog
显示为字段。 当用户检查一个字段时,我将其放在另一个List
。 但是我只能将它们作为整数获取。 如何知道因为需要商品名称而检查了哪一个?
List<Integer> mSelectedItems = new ArrayList<>();
@Override
public void renderGenreList(List<Genre> genreList) {
CharSequence[] genreChar = convertGenreList(genreList);
genreDialog(genreChar);
}
private CharSequence[] convertGenreList(List<Genre> genreList) {
List<String> genreString = new ArrayList<>();
for (int i = 0; i < genreList.size(); i++) {
Genre genre = genreList.get(i);
genreString.add(genre.getName());
}
return genreString.toArray(new CharSequence[genreString.size()]);
}
private void genreDialog(CharSequence[] genres) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder
.setTitle(R.string.multiple_choice_title)
.setMultiChoiceItems(genres, null, (dialog, which, isChecked) -> {
if (isChecked) {
mSelectedItems.add(which);
} else if (mSelectedItems.contains(which)) {
mSelectedItems.remove(Integer.valueOf(which));
}
})
.setPositiveButton(R.string.OK_button, (dialog, which) -> {
dialog.dismiss();
})
.setNegativeButton(R.string.CANCEL_button, (dialog, which) -> dialog.dismiss());
d = builder.create();
}
您的mSelectedItems列表具有选定项目位置的列表。 因此,您可以在下面进行操作以获取所有物品
for (int i = 0; i < mSelectedItems.size(); i++) {
Genre genre = genreList.get(mSelectedItems.get(i));
// Here genre is one of the items selected and you can get all items in this loop
}
或第二种方法是将值添加到mSelectedItems
而不是添加时,先获取值然后添加
取代-
mSelectedItems.add(which);
同
mSelectedItems.add(genreList.get(which));
那么您将拥有mSelectedItems
及其所选项目列表。 也更新上面的remove方法。
第三种方法是拥有对话框的实例并从那里获取。
AlertDialog mAlert = builder.create();
// Display the alert dialog on interface
mAlert.show();
// get list of selected items
mAlert.getListView().getCheckedItemPositions();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.