我创建了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个项目(第一个项目不在当前视图中,但在向上滚动时查看)下面的列表也会被选中。这发生在列表之外。
有人能解释一下这里发生了什么吗?
答案 0 :(得分:0)
要解决此问题,只需使用:
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
并删除OnItemClickListener。
Android采用View回收。想象一下拥有1,000行的ListView:当用户一次只能看到少数几行时,每行都有一个独特的视图是浪费的。所以适配器明智地只创建了足够的可见的独特视图(在你的情况下约为7或8),并循环使用这些独特的视图来显示所有1,000行;创建更快的应用程序。
您在行中看到的错误检查标记在检查“上一行”时发生,但在行被回收并填充“新”数据后未清除。
希望有意义,否则请注意Android的Romain Guy discuss this phenomena here。