添加到收藏夹并不会持续存在状态

时间:2018-05-16 02:06:01

标签: android favorites

我在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时。但是,如果我搜索不同的类别并再次返回到该类别状态并不会持续存在。

任何帮助都将不胜感激。

2 个答案:

答案 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设置资源。这很好。 但问题是没有条件失败的情况,所以你失去了状态,如果你向下滚动并再次来到这个项目,你失去了你的状态或面对违反你的要求的行为。 因此,只需提供不符合您条件的案例。

相关问题