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



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

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

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

new MyFragment()

并将其添加到我收到此错误ViewPager

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

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

在视图页中具有 WebView 片段的 Web 浏览器

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

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

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

添加片段时,请为其指定不同的标签

最新更新