如何从多选列表视图中获取所选项目

pre*_*thi 47 android android-listview

我正在使用数组适配器,并且这是添加字符串s的数组列表,列表是多选,如何获取列表项的值被点击?

my_contacts_list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice,conts_list);
  my_contacts_list.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

我试图这样做,

SparseBooleanArray positions = my_contacts_list.getCheckedItemPositions();
  int size=positions.size();
  int i=0;
  while(i <= size){
   conts_list.get(positions.get(i));
   i++;
  }
Run Code Online (Sandbox Code Playgroud)

但是position.get(i)是一个数组列表,那么如何检索所选项呢?

小智 44

SparseBooleanArray.get返回一个布尔值,但我相信你需要检查列表中的每个位置,例如

int len = listView.getCount();
SparseBooleanArray checked = listView.getCheckedItemPositions();
for (int i = 0; i < len; i++)
 if (checked.get(i)) {
  String item = cont_list.get(i);
  /* do whatever you want with the checked item */
 }
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个例子中的踢球者知道cont_list是送到适配器的原始List.鉴于此,我不确定如何使这不起作用.checked.get(i),只返回TRUE,如果在作为param传递给适配器的原始List项中检查了索引i. (2认同)

Rog*_*ays 43

这个API很乱.这对我有用.

SparseBooleanArray checked = tags.getCheckedItemPositions();
for (int i = 0; i < checked.size(); i++) {
    if(checked.valueAt(i)) {
        Tag tag = (Tag) tags.getItemAtPosition(checked.keyAt(i));
        Log.i("xxxx", i + " " + tag);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 17

我相信从中获取信息的最快方法SparseArray是迭代密钥(实际上我很确定上述解决方案在所有情况下都不起作用).在ListView将进入对(指数,真实)插入SparseBooleanArray每选定的索引.

所以代码可能如下所示:

SparseBooleanArray checked = lv.getCheckedItemPositions();
int size = checked.size(); // number of name-value pairs in the array
for (int i = 0; i < size; i++) {
    int key = checked.keyAt(i);
    boolean value = checked.get(key);
    if (value)
        doSomethingWithSelectedIndex(key);
}
Run Code Online (Sandbox Code Playgroud)