Android:未选中的checkedtextview项目在ListView中被选中

时间:2012-08-27 03:46:43

标签: android listview checkedtextview

我创建了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个项目(第一个项目不在当前视图中,但在向上滚动时查看)下面的列表也会被选中。这发生在列表之外。

有人能解释一下这里发生了什么吗?

1 个答案:

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