我有一个带有照片回收站的片段(带有相册的用户个人资料)。
我在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)
不明白为什么它会不断添加照片。
答案 0 :(得分:0)
每次要加载新内容之前,您都需要清除列表。
,否则它将仅在列表末尾添加一组新数据。
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()
}
}
})