0

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: キャッチされない例外で終了するスレッド (group=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): at Android.app.ActivityThread.main(ActivityThread.java:5041) 04-02 17:02:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 04-02 17:02 で:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method.invoke(Method.java:511) 04-02 17:02:23.051: E/AndroidRuntime(8937): com.android.internal. os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 04-02 17:02:23.051: E/AndroidRuntime(8937): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 04 -02 17:02:23.051: E/AndroidRuntime(8937): dalvik.system.NativeStart.main(ネイティブ メソッド) で02:23.051: E/AndroidRuntime(8937): android.app.ActivityThread.main(ActivityThread.java:5041) 04-02 17:02:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method で.invokeNative(ネイティブ メソッド) 04-02 17:02:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method.invoke(Method.java:511) 04-02 17:02:23.051: E/ AndroidRuntime(8937): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 04-02 17:02:23.051: E/AndroidRuntime(8937): com.android.internal.os で.ZygoteInit.main (ZygoteInit.java:560) 04-02 17:02:23.051: E/AndroidRuntime (8937): dalvik.system.NativeStart.main (ネイティブ メソッド) で02:23.051: E/AndroidRuntime(8937): android.app.ActivityThread.main(ActivityThread.java:5041) 04-02 17:02:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method で.invokeNative(ネイティブ メソッド) 04-02 17:02:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method.invoke(Method.java:511) 04-02 17:02:23.051: E/ AndroidRuntime(8937): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 04-02 17:02:23.051: E/AndroidRuntime(8937): com.android.internal.os で.ZygoteInit.main (ZygoteInit.java:560) 04-02 17:02:23.051: E/AndroidRuntime (8937): dalvik.system.NativeStart.main (ネイティブ メソッド) でinvokeNative(ネイティブ メソッド) 04-02 17:02:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method.invoke(Method.java:511) 04-02 17:02:23.051: E/AndroidRuntime (8937): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 04-02 17:02:23.051: E/AndroidRuntime(8937): com.android.internal.os で。 ZygoteInit.main (ZygoteInit.java:560) 04-02 17:02:23.051: E/AndroidRuntime (8937): dalvik.system.NativeStart.main (ネイティブ メソッド) でinvokeNative(ネイティブ メソッド) 04-02 17:02:23.051: E/AndroidRuntime(8937): java.lang.reflect.Method.invoke(Method.java:511) 04-02 17:02:23.051: E/AndroidRuntime (8937): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 04-02 17:02:23.051: E/AndroidRuntime(8937): com.android.internal.os で。 ZygoteInit.main (ZygoteInit.java:560) 04-02 17:02:23.051: E/AndroidRuntime (8937): dalvik.system.NativeStart.main (ネイティブ メソッド) でE/AndroidRuntime(8937): dalvik.system.NativeStart.main(ネイティブメソッド)E/AndroidRuntime(8937): dalvik.system.NativeStart.main(ネイティブメソッド)

誰でもこの問題の解決策を見つけるのを手伝ってくれますか...

ありがとうございました

4

2 に答える 2

0

NullPointerException は、構成の変更後にフラグメントがアクティビティに追加されなくなる可能性があるために発生します。これは、構成の変更中にフラグメントが保持されない場合に発生します。

次の 2 つのオプションがあります。

  1. Jobcat-Fragment に setRetained(true); を追加します。onCreate() メソッドに。これにより、フラグメントはオリエンテーションの変更に耐え、以前と同じ TAG でアクティビティに再度追加されます。これは、リークを避けるために GUI を持つフラグメントで行うことはお勧めしませんが、これを実現するための便利な方法が他にないことが時々ありました。

  2. チェックする

    フラグメント f = getSupportFragmentManager().findFragmentByTag("B") -> null

その場合、アクティビティからフラグメントを削除する必要はありません。とにかくもう存在しないからです。

于 2013-10-31T09:59:34.873 に答える
-1

追加してください

android:configChanges="orientation|keyboardHidden|screenSize"

現在のアクティビティが記述されている androidmanifest.xml で...

于 2013-04-02T13:36:26.313 に答える