屏幕方向后,片段删除代码无法正常工作

时间:2013-04-02 11:48:47

标签: android android-fragments

iam初学者在Android编程中... 我使用以下代码将片段添加到布局中

                Fragment f=new Jobcat();
    FragmentManager fm=getSupportFragmentManager();
    FragmentTransaction ft =fm.beginTransaction();
    ft.add(R.id.jobcategoryfragment, f,"A");
    ft.commit();
                ft.add(R.id.jobcategoryfragment, f,"C");
    ft.commit();
    ft.add(R.id.jobcategoryfragment, f,"B");
    ft.commit();

并使用以下代码删除片段..

Fragment f = getSupportFragmentManager().findFragmentByTag("B");
   FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
   ft.remove(f);
   ft.commit();

如果屏幕方向没有改变,它运行良好...如果我改变了屏幕方向,或者即使我在获得运行时错误后返回到原始状态

  

04-02 17:02:23.051:W / dalvikvm(8937):threadid = 1:线程退出,未捕获异常(组= 0x41082930)   04-02 17:02:23.051:E / AndroidRuntime(8937):致命异常:主要   04-02 17:02:23.051:E / AndroidRuntime(8937):java.lang.NullPointerException   04-02 17:02:23.051:E / AndroidRuntime(8937):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:651)   04-02 17:02:23.051:E / AndroidRuntime(8937):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)   04-02 17:02:23.051:E / AndroidRuntime(8937):在android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:429)   04-02 17:02:23.051:E / AndroidRuntime(8937):在android.os.Handler.handleCallback(Handler.java:725)   04-02 17:02:23.051:E / AndroidRuntime(8937):在android.os.Handler.dispatchMessage(Handler.java:92)   04-02 17:02:23.051:E / AndroidRuntime(8937):在android.os.Looper.loop(Looper.java:137)   04-02 17:02:23.051:E / AndroidRuntime(8937):在android.app.ActivityThread.main(ActivityThread.java:5041)   04-02 17:02:23.051:E / AndroidRuntime(8937):at java.lang.reflect.Method.invokeNative(Native Method)   04-02 17:02:23.051:E / AndroidRuntime(8937):at java.lang.reflect.Method.invoke(Method.java:511)   04-02 17:02:23.051:E / AndroidRuntime(8937):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   04-02 17:02:23.051:E / AndroidRuntime(8937):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)   04-02 17:02:23.051:E / AndroidRuntime(8937):at dalvik.system.NativeStart.main(Native Method)

任何人都可以帮我找到解决这个问题的方法......

谢谢

2 个答案:

答案 0 :(得分:0)

发生NullPointerException是因为在配置更改后,片段可能不再添加到您的活动中。如果在配置更改期间未保留Fragment,则会发生这种情况。

您有两种选择:

  1. 在你的Jobcat-Fragment中添加setRetained(true);到你的onCreate()方法。有了这个,你的片段将在Orientation Change中存活下来并以与以前相同的TAG读回你的活动。建议不要使用具有GUI的片段以避免泄漏,但有时我发现没有其他方便的方法来实现此目的。

  2. 检查是否

    Fragment f = getSupportFragmentManager()。findFragmentByTag(“B”) - >空

  3. 如果是这样,则无需从您的活动中删除该片段,因为它不再存在。

答案 1 :(得分:-1)

请添加

android:configChanges="orientation|keyboardHidden|screenSize"
在androidmanifest.xml中描述当前活动...