【问题标题】:Adding to favorite doesn't persist state添加到收藏夹不会保持状态
【发布时间】:2018-05-16 02:06:01
【问题描述】:

我在 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);
                }
            }
        });

在这里,当我单击收藏图标时,它会变为收藏。但是,如果我搜索不同的类别并再次返回该类别,则状态不会持续。

任何帮助将不胜感激。

【问题讨论】:

  • 请详细提供更多代码!!
  • 你需要使用setTag()/getTag()
  • @VVB 你的意思是 setTag() 而不是 setFav()?

标签: android favorites


【解决方案1】:

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

要解决此问题,请在存储收藏夹位置的适配器中维护一个全局变量,并在 onBindViewHolder 中添加类似条件

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

else 条件非常重要,否则多个视图将具有 Fav 视图

【讨论】:

  • 但我可以选择将 Tour 添加到 myTourList。即使我滚动或更改到另一个选项卡并返回,fav 也适用于该列表。它仅不适用于搜索列表项。
  • 对于向上和向下滚动的搜索项目也不会失去状态,但是当我打开另一个选项卡/视图并返回该视图并搜索类似的游览时,它不会持续存在。有什么建议吗?
【解决方案2】:

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

【讨论】:

  • 请参阅我的 cmets 以获取上述答案。问题仅适用于搜索列表中的旅行。它适用于 myTours 列表。
猜你喜欢
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多