从recyclerview获取TextView字符串



Recyclerview包含从数据库获取的三个textview (name, email, phone)的cardlayout。我想从recyclerview中隐藏cardlayout如果它包含name等于某个字符串。我所尝试的是从数据库中获取数据后,我使用if语句来比较名称与字符串,如果它等于它们使cardlayout不可见。但是,如果条件满足

,许多cardlayout会变得不可见。
if (dealer.getName().equals("abcde"))
cardlayout.setVisibility(View.GONE);

在我看来,您的RecyclerView项目与Gonevisibility有多个项目。

我相信你在onBindViewHolder()RecyclerView.Adapter中做了这个逻辑

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

onBindViewHolder()在项目初始化时被调用,当你滚动到另一个位置时,你不再看到该项目,并滚动回该项目位置。

在RecyclerView中。适配器文档,谷歌说关于onBindViewHolder():

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

你应该只在这个方法中获取相关数据项时使用position参数,而不应该保留它的副本。

由于这个原因,当你在它之前或之后重新滚动项目时,并且你没有为你的项目设置else case,那么在onBindViewHolder中它之前或之后的项目的值将使你的内容回到你设置cardlayout隐藏逻辑的项目上。

如何解决这个问题?

对于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
}
...
}

相关内容

  • 没有找到相关文章

最新更新