我知道这个问题以前被问过很多次,但我找不到解释性的答案。
我想有一个 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 将一些页面存储在内存中,因此即使不再在视图中,以前的片段仍在内存中。
添加片段时,请为其指定不同的标签