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)
任何人都可以帮我找到解决这个问题的方法......
谢谢
答案 0 :(得分:0)
发生NullPointerException是因为在配置更改后,片段可能不再添加到您的活动中。如果在配置更改期间未保留Fragment,则会发生这种情况。
您有两种选择:
在你的Jobcat-Fragment中添加setRetained(true);到你的onCreate()方法。有了这个,你的片段将在Orientation Change中存活下来并以与以前相同的TAG读回你的活动。建议不要使用具有GUI的片段以避免泄漏,但有时我发现没有其他方便的方法来实现此目的。
检查是否
Fragment f = getSupportFragmentManager()。findFragmentByTag(“B”) - >空
如果是这样,则无需从您的活动中删除该片段,因为它不再存在。
答案 1 :(得分:-1)
请添加
android:configChanges="orientation|keyboardHidden|screenSize"