0

我已将我的 ListView 选择模式设置如下:

 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

但是在选择了一些项目并尝试 Toast 选定的项目后,它会显示空字符串。

我如何敬酒选定的项目:

 String selected = "";
    int cntChoice = listView.getCount();

    SparseBooleanArray sparseBooleanArray = listView.getCheckedItemPositions();
    for (int i = 0; i < cntChoice; i++) {
        if (sparseBooleanArray.get(i)) {
            selected +=listView.getItemAtPosition(i).toString() + "\n";
        }
    }
    Toast.makeText(getApplicationContext(),selected,Toast.LENGTH_SHORT).show();

我已经为适配器上的转换视图设置了监听器,问题是

那么有可能管理它吗​​?

我的意思是可以设置在转换视图侦听器上选择的项目吗?

4

2 回答 2

0

sparseBooleanArray仅显示所选项目的位置。您应该从绑定到列表视图的数组或游标中获取数据。例如,如果你有一个光标,你应该使用cursor.moveToPosition( item ).

试试这个页面:

http://www.yogeshblogspot.com/how-to-get-selected-items-from-multi-select-list-view/

于 2014-08-29T09:33:40.207 回答
0

问题是当我为转换视图单击监听器时,它没有设置自动选择的项目,所以我需要手动完成

为此,我们需要Map将所选项目及其位置存储起来

private Map<Integer, String> selectedItems=new HashMap<Integer,String>;

所以我们应该在适配器上这样做:

 convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (!selectedItems.containsKey(position))
                    selectedItems.put(position, holder.text.getText().toString());
                else
                    selectedItems.remove(position);
            }
        });

并通过调用此获取项目选定文本:

 public String getSelectedItems() {
    Iterator<Integer> iterator = selectedItems.keySet().iterator();
    String selected = "";
    while (iterator.hasNext()) {
        int position = iterator.next();
        selected += selectedItems.get(position) + "\n";
    }
    return selected;
}
于 2014-08-29T10:10:39.643 回答