【问题标题】:How to hide a child item in a recyclerView based on a condition?如何根据条件在 recyclerView 中隐藏子项?
【发布时间】:2021-09-04 21:02:09
【问题描述】:

首先我使用了以下代码,但对于 Food 类别的项目,它没有显示 Perishable

            if(model.main_category=="Food"){
                holder.itemView.tv_dashboard_item_type.text="Perishable"
                
            }else{
                holder.itemView.tv_dashboard_item_type.visibility=View.GONE
            }

然后我使用以下代码,它显示recyclerView 中的第一个和最后一个项目“易腐烂”,其中只有第一个项目在“食物”类别下,但是,recyclerView 中的最后一个项目不属于“食品”类别。然后我将 Firestore 数据库中项目的类别从“食物”更改为其他内容,并且“易腐烂”从 recyclerView 中的第一个和最后一个项目都消失了(最后一个项目不是食物)。使用此代码,中间的项目会根据其类别正确显示“易腐烂”。我在这里做错了什么?

我想要的是它应该为属于“食品”类别的项目显示“易腐烂”并隐藏其他类别的视图。

            if(model.main_category=="Food"){
                holder.itemView.tv_dashboard_item_type.text="Perishable"
                holder.itemView.tv_dashboard_item_type.visibility=View.VISIBLE
            }else{
//              holder.itemView.tv_dashboard_item_type.visibility=View.VISIBLE
            }

谢谢。

【问题讨论】:

  • 这不是适配器的责任;事先构建您的数据,然后将正确的列表与您要显示的数据一起传递给适配器。适配器不需要担心这样的事情。

标签: android kotlin android-recyclerview


【解决方案1】:

正如 Yash Joshi 所说,您必须完整定义条件 因为项目不会再次重新创建,所以同一个项目会根据您的定义更改其值。如果未定义完整条件,则以前的值保留在该项目上

【讨论】:

    【解决方案2】:

    您正在更改视图的visibility,但未正确定义 else 条件。有时,由于这种歧义,recyclerview 无法正确刷新视图。

    试试这个:

        if(model.main_category == "Food") {
            holder.itemView.tv_dashboard_item_type.visibility = View.VISIBLE
            holder.itemView.tv_dashboard_item_type.text = "Perishable"
        } else {
            holder.itemView.tv_dashboard_item_type.visibility = View.GONE
        }
    

    希望有效!

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2021-05-21
      • 2020-08-19
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      相关资源
      最近更新 更多