【问题标题】:Switching Fragments too quickly causes: java.lang.IllegalStateException: No activity切换片段太快导致:java.lang.IllegalStateException:无活动
【发布时间】:2015-04-28 14:15:40
【问题描述】:

我没有使用ViewPager,我调用任何Fragment 事务的唯一位置是单击活动布局中导航栏上的按钮。

当我太快地切换到片段时(比如来回切换),我得到这个异常:

java.lang.IllegalStateException: 无活动

似乎是当我点击切换另一个Fragment 而第一个尚未完全加载完成时。我正在使用FragmentActivity

任何人都可以对此有所了解吗?

我的代码切换Fragments:

fragmentManager.beginTransaction()
    .replace(R.id.container, old,
        fragment.getClass().getSimpleName())
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit();

编辑: 取出过渡解决了这个问题,但我想知道是否有办法通过适当的过渡来做到这一点。我的理论是,过渡会延迟片段生命周期,并在启动另一个片段事务时导致活动为空。

【问题讨论】:

  • @shkschneider 我已经调查过了。显然这是新支持库的一个错误,但我在这里没有使用子片段管理器。这只是一个基本的应用程序,有 4 个屏幕,可通过 Activity 中的按钮访问。
  • 我认为您的问题与获取上下文有关 onAttach,您是否尝试过稍后获取上下文?例如onActivityCreated
  • 我从片段的 onAttach 回调中获取我的活动引用。这发生在甚至添加片段之前。异常由片段管理器抛出。
  • @sihrc 如果这是一个支持库错误,那就不好了。有任何链接可以支持您的假设吗?

标签: android android-fragments


【解决方案1】:

我今天遇到了同样的问题。原来我正在缓存我的 Fragment(这是完全有效的),但我很快就会删除/添加它(当仍在制作动画时)

在调用.replace(R.id.container, old)之前尝试检查:old.isRemoving()

true 表示它仍在使用中,重新添加它会触发问题。在这种情况下,您应该创建一个新的片段实例。

我的猜测是我试图重新添加一个片段,而它仍在为它的移除设置动画,因此需要两个片段实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多