【发布时间】:2019-05-28 09:31:53
【问题描述】:
我有一个带有照片回收器的片段(带有画廊的用户个人资料)。
我在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)
不明白为什么它不断重新添加照片。
【问题讨论】:
-
我认为您需要清除适配器内的集合并重新添加它们。之后使用 notifyDataSetChanged 生效。这可能会有所帮助。
标签: android kotlin android-recyclerview