Dan*_*bec 5 android android-viewpager fragmentpageradapter
我在viewPager中有几个页面(片段).
当我试图删除(例如)第一个时,像这样:
mFragmentManager.beginTransaction().remove(Page1).commit();
Run Code Online (Sandbox Code Playgroud)
它说
IllegalStateException has occured.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么.有人能帮助我吗?谢谢.
例外:
java.lang.IllegalStateException: Can't change tag of fragment Page2{40586418 #2 id=0x7f080006 android:switcher:2131230726:2}: was android:switcher:2131230726:2 now android:switcher:2131230726:1
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,但无论如何,这里有一些信息,希望对某人有所帮助。
ViewPager 与通过 ViewPager#setAdapter() 设置的适配器一起工作。在这个问题的情况下,似乎 FragmentPagerAdapter 被用作适配器(因为该适配器将片段命名为 android:switcher:[x]:[y] ,如异常中所示)。
关于 FragmentPagerAdapter 的一项重要观察是:
FragmentPagerAdapter 拥有 ViewPager 中使用的已分配片段。
ViewPager 与 ViewPagerAdapter 结合的用户必须定义 FragmentPagerAdapter 的子类来实现 getItem() 方法,原型如下:
public abstract Fragment getItem(int position);
Run Code Online (Sandbox Code Playgroud)
此函数创建 ViewPager 用作页面的不同片段。该方法的实现应该被视为子类为 FragmentPagerAdapter() 提供的用于分配片段的服务。
换句话说,虽然子类分配了片段,但它并不是它们的所有者。
由于如上所述,片段的所有者是 FragmentPagerAdapter,因此所有片段操作(在 FragmentManager/FragmentTransaction 的意义上)必须只能由 FragmentPagerAdapter 完成。
尝试对这些片段执行操作可能会干扰 ViewPager 的正常操作并导致未定义的行为。
在这个问题的情况下,尝试删除 FragmentPagerAdapter 之外的 ViewPager 使用的片段之一,正如所解释的那样,这是不好的,并且可能触发一个以此异常结束的序列。
当需要动态删除/添加/替换 ViewPager 中的页面时,可以在适配器上调用 notificationDataSetChanged() 。
祝你好运!
| 归档时间: |
|
| 查看次数: |
6152 次 |
| 最近记录: |