0

我创建了一个ListView如下Arraylist

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 回答