添加到收藏夹不会保持状态
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 设置资源是好的。
但问题是没有条件失败的情况,所以你正在失去状态,如果你向下滚动并再次来到这个项目,你会失去你的状态或面对违反你要求的行为。
因此,简单地提供不符合您条件的案例。
我在 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 设置资源是好的。 但问题是没有条件失败的情况,所以你正在失去状态,如果你向下滚动并再次来到这个项目,你会失去你的状态或面对违反你要求的行为。 因此,简单地提供不符合您条件的案例。