4

私はリストビューでチェックボックスを使用しており、リストビューで選択した項目を取得したい.問題は、リストビューでチェックボックスがチェックされている場合でも、SparseBooleanArray.size() が常に 0 のままであることです.私はたくさん検索しましたが、問題は残ります同じです。これは私が使用しているコードです:

checked = lvShowContacts.getCheckedItemPositions();
if(checked != null)
{
    for (int i=0; i<checked.size(); i++) {
        if (checked.valueAt(i)) {
            String item = lvShowContacts.getAdapter().getItem(
                    checked.keyAt(i)).toString();
            Log.v("Message",item + " was selected");
        }
    }
    Log.v("Message","checked.size() is "+ checked.size());
    //  else
    //the item is not checked, do something else
}

ここで私はいつも次のようになっchecked.size()てい0ます。助けてください。よろしくお願いします。

4

4 に答える 4

0

私の場合、checked.size() は常に 0 を返し、値は最初は 12 に達しているように見えますが、正しいキーと値のペアを使用しています。したがって、ListView の getCount を使用して反復の制限を取得し、IndexOutOfBoudsException が発生したときに終了します。地獄のように醜いですが、これまでのところうまくいきます。

SparseBooleanArray checked = this.list.getCheckedItemPositions();
            ArrayList<String> ids = new ArrayList<String>();

            try {
                for (int i = 0; i < this.list.getCount(); i++){
                    if (checked.valueAt(i)){                        
                        Object r = this.list.getItemAtPosition(checked.keyAt(i));
                        ids.add(r.getId());                 
                    }               
                }
            } catch (IndexOutOfBoundsException e) {
                Log.e(TAG, e.getMessage(),e);
            }
于 2014-01-05T02:07:50.650 に答える
0

選択した行をループしたい場合

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

このスレッドでこの回答を見つけることができます:複数選択リスト ビューから選択した項目を取得する方法

于 2013-09-05T12:46:22.027 に答える