2013-04-02 3 views
0

новичок 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(); 

и IAM удаления фрагмента, используя следующий код ..

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

Это хорошо работает, если ориентация экрана не меняется ... если я изменил ориентацию экрана, или даже если я вернулся ориентация на состояние после того, как первоначально, что IAM получать ошибки во время выполнения

04-02 17: 02: 23,051: Вт/dalvikvm (8937): ThreadId = 1: поток, выходящий с неперехваченным исключением (группа = 0x41082930) 04-02 17: 02: 23,051: Е/AndroidRuntime (8937): FATAL EXCEPTION: main 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): at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1444) 04-02 17: 02: 23.051: E/AndroidRuntime (8937): at android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.java:429) 04-02 17: 02: 23.051: E/AndroidRuntime (8937): при andr oid.os.Handler.handleCallback (Handler.java:725) 04-02 17: 02: 23.051: E/AndroidRuntime (8937): at android.os.Handler.dispatchMessage (Handler.java:92) 04-02 17: 02: 23.051: E/AndroidRuntime (8937): at 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): at java.lang.reflect.Method.invokeNative (собственный метод) 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): в dalvik.system.NativeStart.main (Native Method)

может кто-нибудь помочь мне найти решение этой проблемы ...

Спасибо

+0

вставьте также журнал ошибок –

+0

, пожалуйста, напишите весь logcat – thepoosh

+1

попробуйте андроид: configChanges = "" в вашей деятельности, в которой вы добавляете фрагмент – Unknown

ответ

-1

добавьте

android:configChanges="orientation|keyboardHidden|screenSize" 

в AndroidManifest.xml, где описывается текущая деятельность ...

0

Исключение NullPointerException происходит потому, что фрагмент больше не может быть добавлен в вашу активность после изменения конфигурации. Это происходит, если фрагмент не сохраняется во время изменений конфигурации.

У вас есть два варианта:

  1. В вашем Jobcat-фрагмент добавить setRetained (истина); к вашему методу onCreate(). С этим ваш фрагмент выдержит изменение ориентации и будет переводиться в вашу деятельность с помощью той же TAG, что и раньше. Это не рекомендуется делать с фрагментами с графическим интерфейсом, чтобы избежать утечек, но иногда я обнаружил, что другого подходящего способа достичь этого не было.

  2. Проверьте

    Фрагмент е = getSupportFragmentManager() findFragmentByTag ("B"). -> нулевой

Если да нет необходимости удалять фрагмент из вашей деятельности, потому что ISN Так или иначе.

Смежные вопросы