Recyclerview包含cardlayout和三個從資料庫獲取的文本視圖(姓名、電子郵件、電話)。我想在recyclerview中隱藏cardlayout,如果它包含的名字等于某個字串。我試著在從資料庫獲取資料后,用if陳述句來比較名字和字串,如果它相等,就使卡片布局不可見。但如果條件滿足,許多卡片布局就不可見了
if (dealer.getName().equals("abcde")
cardlayout.setVisibility(View.GONE)。
uj5u.com熱心網友回復:
在我看來,你的RecyclerView專案有多個visibility為Gone的專案。
而且我確信你是在onBindViewHolder()中的RecyclerView.Adapter
為什么你會遇到這樣的情況?
onBindViewHolder()當該專案被初始化時,該專案被呼叫,當你滾動到另一個位置時,你就不會再看到該專案,并滾動到該專案位置。
在RecyclerView.Adapter檔案中,Google對onBindViewHolder()說:
由RecyclerView呼叫,在指定的位置顯示資料。這個方法應該更新RecyclerView.ViewHolder.itemView的內容,以反映給定位置上的專案。
而且
在這個方法中獲取相關資料項時,你應該只使用位置引數,而不應該保留它的副本。
由于這個原因,當你重新滾動它之前或之后的專案時,并且你沒有為你的專案設定一個else case,那么在onBindViewHolder中,它之前或之后的專案的值將在你設定cardlayout隱藏邏輯的專案上得到你的內容。
如何解決這個問題?
對于在onBindViewHolder()中顯示或修改視圖項的隱藏邏輯,確保如果你有case if,你有case 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
}
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/329147.html
標籤:
下一篇:引數型別'dynamicFunction(bool)?'不能分配給引數型別'voidFunction(bool?)?Flutter
