gpt4 book ai didi

android - 无法更改 fragment 的标签

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:23 24 4
gpt4 key购买 nike

我在 viewPager 中有几个页面( fragment )。
当我尝试删除(例如)第一个时,如下所示:

mFragmentManager.beginTransaction().remove(Page1).commit();

它是这样说的

IllegalStateException has occured.

我不知道为什么。有人可以帮助我吗?谢谢。

异常(exception):

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

最佳答案

这是一个老问题,但无论如何这里有一些信息,希望它能对某人有所帮助。

ViewPager 与其通过 ViewPager#setAdapter() 设置的适配器一起工作。在这个问题的情况下,似乎 FragmentPagerAdapter 被用作适配器(因为这个适配器将 fragment 命名为 android:switcher:[x]:[y] 出现在异常中)。

关于 FragmentPagerAdapter 的一个重要观察是:

FragmentPagerAdapter 拥有在 ViewPager 中使用的已分配 fragment 。

ViewPager 的用户与 ViewPagerAdapter 的结合必须定义一个实现 getItem() 方法的 FragmentPagerAdapter 的子类,原型(prototype)如下:

public abstract Fragment getItem(int position);

此函数创建 ViewPager 使用的不同 fragment 作为页面。此方法的实现应视为由子类提供给 FragmentPagerAdapter() 以分配 fragment 的服务。

换句话说,虽然子类分配了 fragment ,但它并不是 fragment 的所有者。

因为如上所述, fragment 的所有者是 FragmentPagerAdapter,所以所有 fragment 操作(在 FragmentManager/FragmentTransaction 的意义上)只能由 FragmentPagerAdapter 完成。

尝试对这些 fragment 执行操作可能会干扰 ViewPager 的正常操作并导致未定义的行为。

在这个问题的情况下,尝试删除 FragmentPagerAdapter 之外的 ViewPager 使用的 fragment 之一,正如所解释的那样是错误的,并且可能触发了一个以此异常结束的序列。

当需要在 ViewPager 中动态删除/添加/替换页面时,调用适配器上的 notifyDataSetChanged() 即可。

祝你好运!

关于android - 无法更改 fragment 的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com