【发布时间】:2016-12-07 10:00:57
【问题描述】:
有一个带有 ID 列表的列表片段。通过单击一个 ID,一个新的活动 DETAIL_ACTIVITY 将启动并按 ID 从休息服务加载数据。此加载发生在 DETAIL_ACTIVITY 的 onResume 方法中。加载完成后,获取的数据用于显示片段。像这样:
public void onResume(){
super.onResume();
fetchById(new Callback(){
public void success(Item someData){
SomeFragment fragment = ...
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment, fragment)
.commit();
}
});
}
这在大多数情况下都有效。但是,当互联网连接速度很慢并且我尚未完成加载时从 DETAIL_ACTIVITY 移回时,它会抛出以下错误:
java.lang.IllegalStateException: 之后无法执行此操作 onSaveInstanceState 在 android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1360) 在 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1378) 在 android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 在 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
使用
commitAllowingStateLoss()
不修复此错误。对此有何其他想法?
【问题讨论】:
-
您确定这是导致 IllegalStateException 的代码行 (FragmentTransaction) 吗?