0

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;
    }
4

1 に答える 1

4

の使用に関するドキュメントのスニペットを次に示しますgetCheckedItemIds()

結果は、選択モードが CHOICE_MODE_NONE に設定されておらず、アダプターに安定した ID がある場合にのみ有効です。(hasStableIds() == true)

デフォルトでは、BaseAdapter(およびそのサブクラスArrayAdapter) は安定したアイテム ID をサポートしていないため、これを利用したい場合は、trueからhasStableIds()戻り、常にgetItemId()各要素に対して一意の値を返す独自のサブクラスを作成する必要があります。

それ以外の場合は、getCheckedItemPositions()代わりに使用する必要があります。説明したユースケースでは、追加の作業なしで必要な同じ答えが得られます。

于 2013-05-20T03:44:00.373 に答える