2013-05-20 2 views
0

Я надеюсь использовать lv.getCheckedItemIds(). Length, чтобы получить сумму выбранных элементов. Кажется, что ArrayAdapter не поддерживает getCheckedItemIds(), правильно?ArrayAdapter <String> не поддерживает getCheckedItemIds()?

private void InitListView(int pos) { 
    List<String> msgList = getSMS(pos); 
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_multiple_choice, msgList); 
    lv.setAdapter(adapter2); 
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      SetSelectedAndTotal(); 
     } 
    }); 
} 

private void SetSelectedAndTotal(){ 
    selectedAndTotal.setText(lv.getCheckedItemIds().length+ "/" 
      + lv.getCount());  
} 


    public List<String> getSMS(int pos) { 
     List<String> sms = new ArrayList<String>(); 
     Uri uriSMSURI = Uri.parse(valueList.get(pos)); 
     Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, 
       null); 

     while (cur.moveToNext()) { 
      String address = cur.getString(cur.getColumnIndex("address")); 
      String body = cur.getString(cur.getColumnIndexOrThrow("body")); 
      sms.add("Number: " + address + " .Message: " + body); 

     } 
     return sms; 
    } 

ответ

4

Вот отрывок из документации по использованию getCheckedItemIds():

Результат справедлив только если режим выбора не был установлен в CHOICE_MODE_NONE и адаптер имеет стабильные идентификаторы. (hasStableIds() == TRUE)

По умолчанию BaseAdapter (и подкласс ArrayAdapter) не поддерживают стабильные идентификаторы позиций, так что если вы хотите использовать это вам нужно будет создать свой собственный подкласс, который возвращает true из hasStableIds() и всегда возвращает уникальное значение от getItemId() для каждого элемента.

В противном случае вам нужно будет использовать getCheckedItemPositions(), который в описанном вами прецеденте предоставит тот же ответ, который вам нужен без дополнительной работы.

Смежные вопросы