Android ViewPager,具有相同类的所有片段,但没有事务

问题描述 投票:0回答:1

我知道这个问题之前已经问过很多次了,但是我找不到解释性的答案。

我想拥有一个MyFragment.java并将其显示在ViewPager的所有3页中。

但是当我尝试使用此方法创建片段时:

new MyFragment()

并将其添加到ViewPager时出现此错误:

java.lang.IllegalStateException:片段已添加在androidx.fragment.app.Fragment.setInitialSavedState(Fragment.java:679)在androidx.viewpager2.adapter.FragmentStateAdapter.ensureFragment(FragmentStateAdapter.java:269)在androidx.viewpager2.adapter.FragmentStateAdapter.onBindViewHolder(FragmentStateAdapter.java:175)在androidx.viewpager2.adapter.FragmentStateAdapter.onBindViewHolder(FragmentStateAdapter.java:67)在androidx.recyclerview.widget.RecyclerView $ Adapter.onBindViewHolder(RecyclerView.java:7065)在androidx.recyclerview.widget.RecyclerView $ Adapter.bindViewHolder(RecyclerView.java:7107)

我想知道是否有可能将相同的片段添加到ViewPager。它可能的应用包括

在Viewpager中具有WebView片段的Web浏览器

为什么我们需要使用单例片段?为什么我们不能将片段视为可以多次实例化的回收器项目?甚至viewpager2也变得越来越像RecyclerView

如果无法重复实例化片段并将其添加到同一个ViewPager,那么除了替换外还有其他方法ViewPager适配器中的片段具有正常的放大视图?会是是可以容忍的解决方案?

android android-fragments android-viewpager recycler-adapter android-fragmentactivity
1个回答
0
投票

您会收到此错误,因为当您添加片段时,您没有在其上放置不同的标签,因此它会检查该片段是否已被其类添加。而且viewpager将一些页面存储在内存中,因此即使不再在视图中,上一个片段仍在内存中。

添加片段时,给它一个明显的标签

© www.soinside.com 2019 - 2024. All rights reserved.