android - 我想在将其设置为 RecyclerView 适配器之前更新项目列表。列表来自服务器(Android、Kotlin)[已关闭]
问题描述
我正在做一个项目。场景是我从服务器接收项目列表。在将其设置为 recycler-view 适配器之前,我正在检查项目是否被用户删除,如果项目被删除,则 itemId、deletedItemsCount、customerId 等已删除项目的数据将存储在本地数据库中。然后从数据库中获取特定产品的已删除项目并将其从从服务器接收的总项目中减去,然后更新列表中的特定项目,然后将其设置为适配器。
理解场景的简单方法是(步骤)
- 从服务器接收产品列表
- 通过从本地数据库获取数据检查项目是否被删除
- 如果是,则将特定产品的已删除项目存储在本地数据库中
- 从本地数据库中获取已删除的项目并将其从项目接收服务器中减去
- 在将其设置为适配器之前更新该服务器列表
- 然后将其设置为适配器
问题是当用户通过单击已删除图标删除项目时,它会更新列表中的所有产品项目。它应该更新用户单击删除图标的特定产品的项目。
随附的屏幕截图和代码片段供您参考。任何类型的建议都会有所帮助。谢谢你。
mainLocalViewModel.getAllDeletedItems().observe(viewLifecycleOwner, Observer {
viewModel.customerOrdersList.clear()
for (items in viewModel.serverCustomerOrderList) {
viewModel.customerOrdersList.add(items as OrderItemModel)
}
if (it != null && it.isNotEmpty()) {
for (itemsInDb in it) {
for ((index, itemsInServer) in viewModel.customerOrdersList.withIndex()) {
if (itemsInDb.itemId == itemsInServer.itemId && itemsInDb.customerId == viewModel.customerId) {
val totalInServer = itemsInServer.itemTotal
val totalInDb = itemsInDb.deletedItems
val remainingTotalItems = totalInDb?.let { it1 ->
totalInServer?.minus(
it1
)
}
viewModel.customerOrdersList[index].itemTotal = remainingTotalItems
if (::customerOrdersAdapter.isInitialized) {
customerOrdersAdapter.notifyItemChanged(index)
}
}
}
}
if (!::customerOrdersAdapter.isInitialized) {
customerOrdersAdapter =
CustomerOrdersAdapter(
requireContext(),
viewModel.customerOrdersList,
this
)
binding.apply {
recyclerViewCustomerOrder.apply {
layoutManager = GridLayoutManager(requireContext(), 2)
adapter = customerOrdersAdapter
}
}
}
}
解决方案
您可能想在本教程中查看 DiffUtil:https ://www.raywenderlich.com/21954410-speed-up-your-android-recyclerview-using-diffutil
它基本上是一个比较列表中每两项并计算新旧数据列表之间差异的类,这样如果您只删除一个项目,它应该只从列表中更新该项目。
推荐阅读
- c# - 如何在 Content-Disposition 的文件名中添加“/”
- bash - 打印文件中未排序的字符串之间的差异
- php - 一页的面包屑(wordpress)
- c# - 基于没有 if-else(或开关)的枚举选择要调用的函数
- apache-spark - 是否可以在程序完成后告诉 Spark 删除工作目录?
- drop-down-menu - 如何读取下拉选择的索引 ID?
- php - Google App Engine - 第一个请求很慢
- regex - 域名过滤器的 Nginx 正则表达式问题
- java - [spark-cassandra-connector]如何在spark 2.3.1中将scala隐式支持的代码转换为java
- apache-kafka - Kafka 代理对大量消费者群体的影响