Axe*_*cia 55 android fragment illegalstateexception android-fragments android-3.0-honeycomb
我在容器Activity上使用此方法来显示BFrag
public void showBFrag()
{
// Start a new FragmentTransaction
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
if(mBFrag.isAdded())
{
Log.d(LOG_TAG, "Show() BFrag");
fragmentTransaction.show(mBFrag);
}
else
{
Log.d(LOG_TAG, "Replacing AFrag -> BFrag");
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);
}
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
我从容器Activity中调用它; 首次:
然后我按下后退按钮:
然后我通过从同一个Activity调用showBFrag()再次前进:
所以:
编辑:这是异常的完整信息.
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): java.lang.IllegalStateException: Fragment already added: BFrag{40b28158 id=0x7f0c0085}
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:322)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:360)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at android.app.BackStackRecord.replace(BackStackRecord.java:352)
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): at myPackageName.containerActivity.showBFrag() // This line: "fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);"
Run Code Online (Sandbox Code Playgroud)
Axe*_*cia 42
最后我的解决方法是执行前一个片段的remove()并添加()新的片段.虽然这就是replace()方法的意思......
但我仍然猜测为什么在这种情况下,replace()方法没有正常工作......真的很奇怪,我想抛弃它是因为我误解了某些东西或做错了什么.
Nat*_*ann 12
如果活动的状态已经保存,则不再可以安全地调用提交.你必须打电话commitAllowingStateLoss().希望这可以帮助!
编辑:好的我已仔细查看了您的问题,问题是您是否正在尝试添加已添加的片段.即使您使用替换或删除呼叫,也无法执行此操作.我找到的唯一解决方法是创建片段的新实例并每次添加它.删除或替换片段后,最好删除所有对它的引用,以便GC可以处理它.
可能与此问题没有直接关联,但我也注意到设置到FragmentTransaction的转换将导致IllegalStateException,而不设置转换则不会.
以下是此问题的错误:http://code.google.com/p/android/issues/detail?id = 25598
| 归档时间: |
|
| 查看次数: |
84257 次 |
| 最近记录: |