ArrayAdapter <string>不支持getCheckedItemIds()?</string>

时间:2013-05-20 03:25:48

标签: android

我希望使用lv.getCheckedItemIds()。length来获取所选项目的总和。 似乎ArrayAdapter不支持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;
    }

1 个答案:

答案 0 :(得分:4)

以下是有关使用getCheckedItemIds()的文档的摘录:

  

仅当选择模式未设置为CHOICE_MODE_NONE且适配器具有稳定ID时,结果才有效。 (hasStableIds()== true)

默认情况下,BaseAdapter(及其子类ArrayAdapter)不支持稳定项ID,因此如果要利用它,则需要创建自己的子类,返回true来自hasStableIds()并始终为每个元素返回getItemId()的唯一值。

否则,您将不得不使用getCheckedItemPositions(),在您描述的用例中,如果没有额外的工作,您将提供相同的答案。