Содержимое Recycler удваивается каждый раз, когда фрагмент добавляется в менеджер фрагментов, даже если он должен быть очищен - PullRequest
0 голосов
/ 28 мая 2019

У меня есть фрагмент с фотографиями переработчика (профиль пользователя с галереей).

Я заполняю утилизацию в 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) {
        }
    })
}

Я вызываю это внутри в методе создания, внутри 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)

Не могу понять, почему он продолжает добавлять фотографии.

1 Ответ

0 голосов
/ 28 мая 2019

Вы должны очищать свой список перед каждой загрузкой свежего нового контента.

или просто добавит новый набор данных в конец вашего списка.

           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()
                    }
                }
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...