Android ViewPager,具有相同类的所有片段,无需事务

时间:2020-01-28 18:09:51

标签: android android-fragments android-viewpager android-recyclerview android-fragmentactivity

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

我想要一个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适配器中的片段具有正常的放大视图?会是 是可以容忍的解决方案?

1 个答案:

答案 0 :(得分:0)

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

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