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

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

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

【问题讨论】:

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

标签: android android-studio android-layout android-recyclerview


【解决方案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
    }
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2015-08-21
    相关资源
    最近更新 更多