我在Android中有一个旅游列表,我正在尝试实施添加到收藏夹。 最喜欢的作品是myTours中添加的列表,但不适用于搜索列表中的游览。
这是代码:
private List<Tour> tourList;
holder.imgFavourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(tourList.get(position).getFav().equalsIgnoreCase("0")) {
tourList.get(position).setFav("1");
// listener.onFavourited(tourList.get(position), true);
holder.imgFavourite.setImageResource(R.drawable.faved);
} else {
tourList.get(position).setFav("0");
// listener.onFavourited(tourList.get(position), false);
holder.imgFavourite.setImageResource(R.drawable.not_faved);
}
}
});
这时当我点击Fav图标变为faved时。但是,如果我搜索不同的类别并再次返回到该类别状态并不会持续存在。
任何帮助都将不胜感激。
答案 0 :(得分:0)
Listview / RecyclerView重用视图。如果列表中有20个项目,并且一次可见4个,则在滚动时,将重复使用视图以显示新的可见视图以节省内存。因此,如果您更改位置5处的视图并向下滚动并向上滚动到位置5,则您在位置5处更改的视图与您向后滚动后看到的视图不同。因此视图改变
要解决此问题,请在存储收藏位置的适配器中维护一个全局变量,并在onBindViewHolder中添加一个类似
的条件if(position = favPosition)
<Change to fav view>
else
<Change to Normal View>
else条件非常重要,否则多个视图将具有Fav视图
答案 1 :(得分:0)
对于Recycler视图,始终只考虑两种情况,导致列表更改行为(例如为其他列表项设置相同的图像,因为它会重复使用单元格查看)。您正在做的下面的错误。 在bindviewholder中,您将从模型类中获取数据,并根据您为imageview设置资源。这很好。 但问题是没有条件失败的情况,所以你失去了状态,如果你向下滚动并再次来到这个项目,你失去了你的状态或面对违反你的要求的行为。 因此,只需提供不符合您条件的案例。