2015-04-28 44 views
4

我没有使用ViewPager,而且我正在调用任何Fragment事务的唯一地方是点击活动布局中导航栏上的按钮。切换片段太快会导致:java.lang.IllegalStateException:No activity

当我太迅速切换到片段(如来回),我得到这个异常:

java.lang.IllegalStateException:没有活动

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

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

我的代码切换Fragment S:

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

编辑: 取出过渡解决了这个问题,但我不知道是否有一种方法,在地方过渡要做到这一点。我的理论是,转换会延迟片段生命周期,并在另一个片段事务启动时导致activity为null。

+0

你看过https://stackoverflow.com/a/17131382/603270 https://stackoverflow.com/a/15656428/603270? – shkschneider

+0

@shkschneider我已经看过这些。显然,这是一个新的支持库的错误,但我没有在这里使用小孩片段管理器。这只是一个基本的应用程序,可通过活动中的按钮访问4个屏幕。 – sihrc

+0

我认为你的问题与获取onAttach上下文有关,你是否试图在以后获取上下文?例如onActivityCreated – Rarw

回答

4

今天遇到同样的问题。原来是说我缓存我的片段(这是完全合法的),但我已经删除/尽快加入它(的时候依然动画)

请检查:old.isRemoving()调用.replace(R.id.container, old)

true意味着它仍然是前在使用和重新添加它会触发问题。在这种情况下,您应该创建一个新的片段实例。

我的猜测是我试图重新添加一个片段,而它仍然在为其移除动画,所以需要两个片段实例。