繁体   English   中英

Multichoice AlertDialog获取选择的值作为字符串

[英]Multichoice AlertDialog get selected values as Strings

我从服务器获得一个List ,该ListMultiChoice 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM