Fragment已经被added了导致的异常。
生活随笔
收集整理的這篇文章主要介紹了
Fragment已经被added了导致的异常。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java.lang.IllegalStateException: Fragment already added: ******Effect
出現的原因是commit方法提交是異步的,所以容易出現,判斷的時候是還沒有added的狀態,但是在真的添加的時候,重復添加了,其實就是一個同步異步的問題。
解決方式其實就是自己添加一個tag,每個fragment一個tag就可以解決重復添加導致的異常了。
mAdded = new boolean[]{false, false, false, false, false, false};
private synchronized void setIndexSelected(int index) {
Logcat.d(TAG, "mIndex " + mIndex + "; index " + index);
if(mIndex == index){
return;
}
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
//隱藏
ft.hide(mFragments[mIndex]);
//判斷是否添加
if (index < mFragments.length) {
if (!mFragments[index].isAdded() && !mAdded[index]) {
Logcat.d(TAG, "add " + mFragments[index]);
ft.add(R.id.content, mFragments[index]).show(mFragments[index]);
mAdded[index] = true;
} else {
Logcat.d(TAG, "show " + mFragments[index]);
ft.show(mFragments[index]);
}
}
ft.commit();
//再次賦值
mIndex = index;
}
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: java.lang.IllegalStateException: Fragment already added: SoundEffectFragment{acd69f9 #1 id=0x7f0e0205}
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1323)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:675)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:742)
[2017/7/21 10:42:08] 07-21 05:41:00.457 4835 4835 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632)
總結
以上是生活随笔為你收集整理的Fragment已经被added了导致的异常。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android fragment动画,F
- 下一篇: 学习笔记11-C语言-指针