0

私は以下のように作成しましたListViewArraylist

nAdapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_checked,nArrayList);

mListView.setAdapter(nAdapter);

次に setOnItemClickListener():

mListView.setOnItemClickListener(new OnItemClickListener(){

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
       if(((CheckedTextView) arg1).isChecked()){
            ((CheckedTextView)arg1).setChecked(false);
       }else{
        ((CheckedTextView)arg1).setChecked(true);
       }
}});

問題は、アイテムを選択すると、7 つまたは 8 つのアイテム (現在のビューにはなく、上にスクロールすると表示される最初のアイテム) ごとに、リストのさらに下にも選択されることです。これは、リストの外でも発生します。

誰かがここで何が起こっているのか説明できますか?

4

1 に答える 1

0

これを解決するには、次を使用します。

mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

OnItemClickListener を削除します。


Android は View のリサイクルを採用しています。1,000 行の ListView を想像してみてください。ユーザーが一度に数行しか表示できない場合、各行に一意の View を用意するのは無駄です。したがって、アダプターは賢明にも、表示される十分な数の一意のビュー (この場合は約 7 または 8) のみを作成し、これらの一意のビューをリサイクルして 1,000 行すべてを表示します。より高速なアプリを作成します。

行に表示される誤ったチェックマークは、「前の」行がチェックされたが、行がリサイクルされて「新しい」データが入力された後にクリアされなかった場合に発生します。

それ以外の場合は、Android の Romain Guyがこの現象についてここで議論しているのをご覧ください。

于 2012-08-27T04:09:10.187 に答える