问题描述
我有一个相当复杂的 RecyclerView,其中有 9 个单独的视图,其中两个具有嵌套的 Recycler 视图。问题是 RecyclerView 在滚动时没有回收项目,所以看起来 RecyclerView 丢失了数据。但是,如果我等几分钟,这些项目就会再次滚动。我试着做:
recyclerView.recycledViewPool.setMaxRecycledViews(0,0);
和
holder.setIsRecyclable(false)
我尝试了一些使用 onScrollListener 的蛮力解决方案,一旦使用滚动到底部,它会强制回收器视图再次绘制自己,但这会导致滚动移动。
这是包含 RecyclerView 的片段中的一些代码:
private fun setUpObservableForTiles() {
homeDashboardViewModel.listOfRegisteredListDashBoardViews.observe(viewLifecycleOwner,Observer {
it ?: return@Observer
val list = arrayListOf<HomeDashBoardItem>()
it.forEach { dashboardType ->
when (dashboardType) {
DashBoardType.CHECKING_ACCOUNT -> {
val checkingAccountItem = AccountItem(
homeDashboardViewModel.last4Pan,homeDashboardViewModel.expandRecyclerView,balanceViewModel.balanceInfo,balanceViewModel.getBalanceResult,transactionViewModel.recentMutableList,homeDashboardViewModel.successfulTransactions,directDepositViewModel.accountDetailsResponse,overdraftViewModel.isODAccount,theme,dashboardType.sortOrder,dashboardType)
list.add(checkingAccountItem)
}
DashBoardType.OVERDRAFT_PROTECTION -> {
val overdraftProtectionItem = OverdraftProtectionItem(
theme,dashboardType)
list.add(overdraftProtectionItem)
}
DashBoardType.ATM_LOCATIONS -> {
val atmLocationItem = HomeDashBoardItem(
theme,dashboardType)
list.add(atmLocationItem)
}
DashBoardType.DIRECT_DEPOSIT -> {
directDepositItem.apply { this.sort = dashboardType.sortOrder }
list.add(directDepositItem)
}
DashBoardType.SECURED_ACCOUNT -> {
FeatureControlManager.getInstance()?.featureControl?.observe(viewLifecycleOwner,Observer { ddaFeatureControl ->
val secureCardItem = SecureCardItem(
ddaFeatureControl,trackCardViewModel.loading,trackCardViewModel.trackInfoResponse,trackCardViewModel.trackErrorResponseLiveData,dashboardType)
list.add(secureCardItem)
submitListToAdapter(list)
})
}
DashBoardType.SECURED_CREDIT_CARD_ACCOUNT -> {
if (::securedCardViewModel.isInitialized) {
val secureCardItem = SecuredCreditCardItem(
false,securedCardViewModel.securedCardInfo,securedCardTransactionViewModel.allMutableList,securedCardTransactionViewModel.loading,dashboardType,securedCardViewModel,securedCardTransactionViewModel)
isPromoSCC=false
list.add(secureCardItem)
}
}
DashBoardType.SECURED_CREDIT_CARD_PROMO_ACCOUNT -> {
if (::securedCardViewModel.isInitialized) {
val secureCardItem = SecuredCreditCardItem(
false,securedCardTransactionViewModel)
isPromoSCC=true
list.add(secureCardItem)
}
}
DashBoardType.REWARDS -> {
val rewardsItem = RewardsItem(
theme,dashboardType)
list.add(rewardsItem)
}
DashBoardType.SAVINGS_ACCOUNT,DashBoardType.SAVINGS_ACCOUNT_PROMO -> {
val vaultItem = VaultItem(
vaultViewModel.vaultsApiCallStatus,vaultViewModel.vaultResponse,dashboardType
)
list.add(vaultItem)
}
else -> return@Observer
}
}
submitListToAdapter(list)
})
}
private fun submitListToAdapter(list: ArrayList<HomeDashBoardItem>) {
list.sortWith { o1,o2 -> (o1.sort).compareTo(o2.sort) }
listDashboardAdapter.submitList(list.distinct())
val scrollPosition = SharedPreferencesManager.getCurrentState().scrollPositionForDashboard
Handler().postDelayed(Runnable { (binding.recyclerView.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(scrollPosition,0) },200)
}
注意:这仅在 ViewHolders 之一中的嵌套 RecyclerView 可见时发生。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)