我知道这个问题之前已经问过很多次了,但是我找不到解释性的答案。
我想拥有一个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适配器中的片段具有正常的放大视图?会是是可以容忍的解决方案?
您会收到此错误,因为当您添加片段时,您没有在其上放置不同的标签,因此它会检查该片段是否已被其类添加。而且viewpager将一些页面存储在内存中,因此即使不再在视图中,上一个片段仍在内存中。
添加片段时,给它一个明显的标签