更改适配器中项目的视图

Posted

技术标签:

【中文标题】更改适配器中项目的视图【英文标题】:Change view of item in Adapter 【发布时间】:2021-08-21 16:07:35 【问题描述】:

我有一个适用于市场的产品适配器。我用从服务器收到的所有产品设置了这个适配器。我还调用服务器以获取该用户最喜欢的产品,因为我想以可见的红色心形显示它们以将它们与其他产品区分开来。我面临这两个问题:

    如果我为所有产品设置了适配器,然后我通过迭代列表修改了需要激活红心的项目,即使只是 1 秒,用户也会注意到它。 拥有收藏商品列表后,如何修改收藏商品的视图?

我确信有一种简单的方法可以做到这一点。

谢谢

【问题讨论】:

首先获取产品列表,然后获取收藏列表。然后遍历产品列表并与收藏列表进行比较,并为收藏的项目设置延迟。然后将列表最终传递给适配器。取决于设置的标志红心 insode onBindViewHolder 但我想展示所有产品,而不仅仅是喜欢的产品。我不明白你想让我为适配器设置什么。产品没有“favorite”属性,所以无法在BindViewHolder上查看。 这个产品列表是否也包含最喜欢的项目? 是的,确实如此,但我不知道如何检查 onBindViewHolder 产品是否受欢迎。我无法向 Product 实体添加属性,因为它不属于那里。 然后将两个列表传递给adapter.inside onBindViewHolder 获取每个产品项并检查该产品是否包含在收藏列表中 【参考方案1】:

您需要在网络调用期间操作数据以设置所有收藏或不收藏的产品,一旦设置好,只需填充模型。它应该改变视图。

这意味着在设置适配器之前,进行所有需要疯狂的服务器调用并操作数据。

我的建议是更改服务器端代码,为每个产品添加一个布尔值 产品列表是否是用户最喜欢的。这将使您的工作更轻松,并避免进行两次网络调用。

【讨论】:

但是每个用户都有一个最喜欢的产品列表,所以用户和产品之间的关系是多对多的。那么我如何向 json 添加一个布尔值呢? 好的,这意味着您必须让用户登录应用程序并获取产品列表才能设置收藏夹,对吗?只需简单地将用户 ID 传递给服务器并获取用户的所有产品,包括他的收藏夹【参考方案2】:

修改您的服务器代码,添加一个布尔标志来指示特定产品是否被收藏,然后使用您拥有的数据填充视图(请在视图变得可见之前执行此操作,最好在 onBindViewHolder 内)。除非用户故意自己触发操作,否则您不应尝试在视图可见时对其进行操作。

【讨论】:

以上是关于更改适配器中项目的视图的主要内容,如果未能解决你的问题,请参考以下文章

列表视图滚动更改项目视图的背景颜色(简单适配器)

在顶部添加新项目后,回收器视图未滚动到顶部,因为尚未发生对列表适配器的更改

更改列表视图中特定项目的图像视图

根据值使用自定义适配器编辑列表视图中的项目

如何找出分页数据适配器中的第一项已更改

如何更改列表视图特定项目的颜色?