Android ViewPager со всеми фрагментами одного класса без транзакции - PullRequest
0 голосов
/ 28 января 2020

Я знаю, что этот вопрос задавался много раз, но я не смог найти объяснительного ответа.

Я хочу иметь один MyFragment. java и отобразить его для всех 3 страниц ViewPager.

Но когда я пытаюсь создать фрагмент с помощью этого метода:

new MyFragment()

и добавить его к ViewPager, я получаю эту ошибку:

java .lang.IllegalStateException: фрагмент уже добавлен в androidx.fragment.app.Fragment.setInitialSavedState (Fragment. java: 679) в androidx.viewpager2.adapter.FragmentStateAdapter.ensureFragment (FragmentStateAdapter. *) 10: 26 в androidx.viewpager2.adapter.FragmentStateAdapter.onBindViewHolder (FragmentStateAdapter. java: 175) в androidx.viewpager2.adapter.FragmentStateAdapter.onBindViewHolder (FragmentStateAdapter. java: 67) atroidViewonderter $. (RecyclerView. java: 7065) на сайте androidx.recyclerview.widget.RecyclerView $ Adapter.bindViewHolder (RecyclerView. java: 7107)

Мне бы хотелось чтобы узнать, есть ли возможность добавить этот же фрагмент в ViewPager. Возможные применения:

Веб-браузер, имеющий фрагменты WebView в Viewpager

Почему именно нам нужно использовать фрагмент-фрагмент? Почему мы не можем относиться к фрагментам как к предметам переработки, которые могут быть созданы несколько раз? Даже viewpager2 становится все более похожим на RecyclerView.

Если невозможно повторно создавать фрагменты и добавлять их в один и тот же ViewPager, есть ли другие способы, кроме замены фрагментов в адаптере ViewPager обычным накачанным взгляды? Это было бы терпимым решением?

1 Ответ

0 голосов
/ 28 января 2020

Вы получаете эту ошибку, потому что, когда вы добавляете фрагмент, вы не помещаете в него отдельный тег, поэтому он проверяет, был ли фрагмент уже добавлен его классом. А просмотрщик сохраняет некоторые страницы в памяти, поэтому предыдущий фрагмент, даже если он больше не отображается, все еще находится в памяти.

Когда вы добавляете фрагмент, присвойте ему отдельный тег

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...