【问题标题】:Android: unselected checkedtextview items are getting selected in ListViewAndroid:未选中的checkedtextview项目在ListView中被选中
【发布时间】:2012-08-27 03:46:42
【问题描述】:

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

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

【问题讨论】:

    标签: android listview checkedtextview


    【解决方案1】:

    要解决这个问题,只需使用:

    mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    

    并删除您的 OnItemClickListener。


    Android 使用视图回收。想象一个有 1,000 行的 ListView:当用户一次只能看到一小部分时,为每一行拥有一个唯一的 View 是很浪费的。因此,适配器明智地只创建足够多的可见的唯一视图(在您的情况下大约为 7 或 8 个)并回收这些唯一视图以显示所有 1,000 行;创建更快的应用程序。

    您在行中看到的错误复选标记发生在检查“上一个”行但在该行被回收并填充“新”数据后未清除时。

    希望有意义,否则请观看 Android 的 Romain Guy discuss this phenomena here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      相关资源
      最近更新 更多