android - 每次将 Fragment 添加到 Fragment Manager 时,Recycler 的内容都会翻倍,即使它应该被清除
问题描述
我有一个带有照片回收器的片段(带有画廊的用户个人资料)。
我在 中填充回收器,并在收听数据之前onViewCreated
调用我的函数。adapter.clear()
我实际上尝试清除两次。我将片段添加到 supportFragmentManager,当单击返回按钮时,我弹出返回堆栈。
问题是,即使我弹出堆栈(据我的理解,应该删除片段并完全销毁它),当我重新添加片段并转到同一用户的个人资料时,画廊现在有两倍照片。如果我再做一次,它将是三倍。
这是我的功能:
private fun listenToImagesFromRoll() {
galleryRollAdapter.clear()
val ref = FirebaseDatabase.getInstance().getReference("/users/${userProfile.uid}/images")
ref.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
for (imagePath in p0.children){
val imageObjectPath =
FirebaseDatabase.getInstance().getReference("/images/${imagePath.key}/body")
imageObjectPath.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
val imageObject = p0.getValue(Images::class.java)
if (imageObject != null) {
imageList.add(FeedImage(imageObject, 1))
galleryRollAdapter.clear()
galleryRollAdapter.addAll(imageList.reversed())
}
}
})
}
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
我在 in create 方法中调用它,在一个Observer
保存用户我打开的配置文件的内部。
这就是我添加片段的方式:
activity.subFm.beginTransaction()
.add(R.id.feed_subcontents_frame_container, activity.profileSecondRandomUserFragment, "profileSecondRandomUserFragment").addToBackStack("profileSecondRandomUserFragment")
.commit()
这就是我弹出它的方式:
subFm.popBackStack("profileSecondRandomUserFragment", FragmentManager.POP_BACK_STACK_INCLUSIVE)
无法理解为什么它不断重新添加照片。
解决方案
每次要加载新内容之前,您都需要清除列表。
或者它只会在列表末尾附加一组新数据。
imageObjectPath.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
val imageObject = p0.getValue(Images::class.java)
if (imageObject != null) {
---- The point is to clear the collection
---- before you tell your adapter to update the list, like this
++imageList.clear()
imageList.add(FeedImage(imageObject, 1))
+-galleryRollAdapter.clear()// may not need, try it
+-galleryRollAdapter.notifyDataSetChanged()
}
}
})
推荐阅读
- asp.net-mvc - ASP.NET MVC 依赖注入错误:无法访问已释放的对象
- autodesk-forge - 使用 Forge 数据管理 API 获取项目描述
- kubernetes - 在 kubernetes 中使用 RBAC 控制应用程序对不同命名空间的访问
- python - 将代码从二元分类器逻辑回归修改为多类“一对多”逻辑回归
- image - 是否有人面临抖动清除图像缓存的问题?
- javascript - 如何以更复杂的方式检查对象的键是否存在
- ios - 如何使用 SwiftUI 中的搜索栏过滤对象数组?
- json - 在 Python 中追加到字典
- android - 插件“flutter”与此安装 Android Studio 3.6.3 不兼容
- html - 如何在 CSS 中同步两个动画?