每次将片段添加到片段管理器时,Recycler的内容都会加倍,即使它应该被清除

教育网编2023-04-09 18:002030
提问开始:

我有一个碎片与照片回收器(用户档案与画廊)。

我将回收器填充到onViewCreated中,并且我的函数在侦听数据之前调用adapter.clear()。实际上我试着清理了两次。我将片断添加到supportFragmentManager中,当单击back按钮时,我弹出后台堆栈。

问题是,即使我弹出堆栈(据我所知,这应该删除碎片并完全销毁它),当我重新添加碎片并转到同一用户的个人资料时,图片库现在有双倍的照片。如果我再做一次,就会变成三倍。

这是我的函数:

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

你需要在每次加载新内容之前清除列表。

或者,它只是将一组新数据附加到列表的末尾。

           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()
                    }
                }
            })
总结

以上是真正的电脑专家为你收集整理的每次将片段添加到片段管理器时,Recycler的内容都会加倍,即使它应该被清除的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。

评论区