IllegalStateException:如果应用程序在后台非常长,则会显示已添加的片段

N S*_*rma 3 android fragment android-fragments

您好我fragment在我的Android应用程序中使用但是我发现java.lang.IllegalStateException: Fragment already added如果应用程序在后台非常长时会出现一些奇怪的异常.

我查了一下这个https://code.google.com/p/android/issues/detail?id=61247,java.lang.IllegalStateException:已添加的片段,但如何我可以检查分片是否已添加的情况下,当我添加在fragmentFragmentTabHost

源代码 :

public class FirstFragment extends SherlockFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        mTabHost = new FragmentTabHost(getSherlockActivity());

        mTabHost.setup(getSherlockActivity(), getChildFragmentManager(),
                R.layout.registration);

        // Create Child Tab1
        mTabHost.addTab(mTabHost.newTabSpec("child1").setIndicator("Registration"),
                RegistrationFragment.class, null);
    }

}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

java.lang.IllegalStateException: Fragment already added: RegistrationFragment{424d19f8 #0 id=0x7f0600b8 child1 }
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1175)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:616)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:556)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
at android.app.Activity.performStart(Activity.java:5143)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Shi*_*rma 6

在添加之前检查片段是否已存在:

Fragment f = mManager.findFragmentById(R.id.fragment_id);
if(f != null && f instanceof FragmentClassName) {
   //Fragment already exists
} else {
   //Add Fragment
}
Run Code Online (Sandbox Code Playgroud)

  • FYI instanceof进行空检查 (4认同)