3
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.contact_item, new String[] { "name" }, new int[] { R.id.name });
listView.setAdapter(adapter);
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.name);
        checkedTextView.toggle();
        System.out.println(checkedTextView.getText().toString());
    }
});

ListViewの最初の項目をクリックしましたが、CheckedTextViewがListViewの最後の項目を選択し、System.outが正しいです。理由がわかりません。どうすれば修正できますか?

4

1 に答える 1

0

Viewインスタンスの実際の行で使用されるものは、ListView多くの場合リサイクルされます。通常、表示レイヤーは、表示さViewれている行と同じ数のオブジェクトを作成し、それらを循環します。埋め込みを使用している行の選択は、View多くの場合注意が必要です。行内の特定のビューをクリックすると、テキストは正しい場合がありますが、システムは選択する行を認識しない場合があります。setSelection右の行が選択されるように強制する位置で呼び出してみてください。

編集:保証はありませんが、これを試してみて、機能するかどうかを確認してください。

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.name);
        checkedTextView.toggle();
        System.out.println(checkedTextView.getText().toString());
        getListView().setSelection(position);
    }
});
于 2012-04-13T06:40:23.763 に答える