添加到收藏夹不会保持状态

Adding to favorite doesn't persist state

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

如有任何帮助,我们将不胜感激。

Listview/RecyclerView 重用视图。如果您的列表有 20 个项目,并且有 4 个项目同时可见,那么当您滚动时,视图将被重新使用以显示新的可见视图以节省内存。因此,如果您更改位置 5 的视图并向下滚动并向上滚动回到位置 5,则您在位置 5 更改的视图与您向上滚动后看到的视图不同。因此视图改变

要解决此问题,请在存储最喜欢的位置的适配器中维护一个全局变量,并在 onBindViewHolder 中添加一个条件,例如

if(position = favPosition)
    <Change to fav view>
else
    <Change to Normal View>

else 条件非常重要,否则多个视图将拥有最喜欢的视图

对于回收者视图,请始终考虑这两种情况,只有一种情况会导致您的列表改变行为(例如为其他列表项设置相同的图像,因为它会为您的视图重用单元格)。您正在犯以下错误。 在 bindviewholder 中,您从模型 class 获取数据,并基于此为 imageview.which 设置资源是好的。 但问题是没有条件失败的情况,所以你正在失去状态,如果你向下滚动并再次来到这个项目,你会失去你的状态或面对违反你要求的行为。 因此,简单地提供不符合您条件的案例。