从 recyclerview 获取 TextView 字符串

Posted

技术标签:

【中文标题】从 recyclerview 获取 TextView 字符串【英文标题】:Get TextView string from recyclerview 【发布时间】:2021-10-27 20:48:06 【问题描述】:

Recyclerview 包含卡片布局,其中包含从数据库中获取的三个文本视图(姓名、电子邮件、电话)。如果它包含等于某个字符串的名称,我想从 recyclerview 隐藏卡片布局。我尝试的是在从数据库中获取数据后,我使用 if 语句将名称与字符串进行比较,如果相等,它们会使卡片布局不可见。但是如果条件满足,许多卡片布局就会变得不可见

 if (dealer.getName().equals("abcde"))
     cardlayout.setVisibility(View.GONE);
       

【问题讨论】:

我认为解决这个问题的最佳方法是从项目列表中删除相应的项目。 是的,请出示您的 rv 适配器类和活动类。 【参考方案1】:

在我看来,您的 RecyclerView 项目包含多个 visibilityGone 项目。

而且我确定你在 onBindViewHolder() 中在 RecyclerView.Adapter 中执行该逻辑

你为什么会遇到这种情况?

onBindViewHolder() 在项目为 init 时与该项目一起调用,当您滚动到另一个位置时,您不再看到该项目并滚动回该项目位置。

在 RecyclerView.Adapter 文档中,Google 提到了 onBindViewHolder()

由 RecyclerView 调用,在指定位置显示数据。此方法应更新 RecyclerView.ViewHolder.itemView 的内容以反映给定位置的项目。

您应该只在获取该方法内的相关数据项时使用位置参数,并且不应保留它的副本。

因此,当您重新滚动它之前或之后的项目时,并且您没有为您的项目设置 else 大小写,那么 onBindViewHolder 中它之前或之后的项目的值将得到您的内容回到您设置卡片布局隐藏逻辑的项目上。

如何解决问题?

对于在onBindViewHolder() 中显示或修改视图项的隐藏逻辑,请确保如果您有案例if,您有案例else

YourRecyclerViewAdapter.kt

override fun onBindViewHolder(holder: YourViewHolder, position: Int) 
    ...
    if (dealer.name == "abcde") 
        cardLayout.visibility = View.GONE
     else  // You should have else case to return the correct content for other positions
        cardLayout.visibility = View.VISIBLE
    
    ...

【讨论】:

以上是关于从 recyclerview 获取 TextView 字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从RecyclerView项中获取Value

从 Fragment 中的适配器(recyclerview)获取所有项目

从firebase获取数据时Recyclerview为空白

从片段中获取意图值后,我如何在 recyclerview 项目中实现单击

从sqlite获取的数据未显示在recyclerview中

有没有更好的方法从适配器获取对父 RecyclerView 的引用?