列表视图 - 向下滚动后丢失所选项目

时间:2016-03-04 16:04:02

标签: android listview

我在列表视图中选择某个项目后会更改背景,但每次向下滚动时,我都会丢失所选项目

selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@android:color/darker_gray" android:state_selected="true"/>
</selector>

适配器

holder.cardView.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    boolean selected = v.isSelected();
    v.setSelected(!selected);
  }
});

如何保持背景状态?

2 个答案:

答案 0 :(得分:4)

您的观点正在被回收。您需要在其他位置跟踪所选视图(如整数列表,您可以保留所选视图的位置)。

然后,在适配器的getView中,根据列表中是否包含位置来设置所选的声明。

public View getView(int position, View convertView, ViewGroup parent) {
     ...
     view.setSelected(mSelected.contains(position));
     ...
}

答案 1 :(得分:0)

最好改为使用listView选项:

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setItemChecked(itemPosition, true);

或者每次都应该在适配器getView中调用view.setSelected。导致视图被回收后,所选状态将丢失。