2

Android Lollipopのフラグメントのみでトランザクションに関する興味深い問題が発生しています。私が戻って以前に追加されたフラグメントを削除するとクラッシュが発生します。ここでNullPointerException:ヌルオブジェクトリファレンスで 'int android.app.Fragment.mContainerId'フィールドから読み取ろうとしました

は、スタックトレースです:私はそれを削除する方法

getFragmentManager().beginTransaction() 
      .replace(R.id.list_holder, listFragment) 
      .commit(); 

R.id.list_holder

<FrameLayout 
     android:id="@+id/list_holder" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
</FrameLayout> 

::私は取引をしていますどのように

FATAL EXCEPTION: main 
Process: com.parkme.consumer, PID: 15560 
    java.lang.NullPointerException: Attempt to read from field 'int android.app.Fragment.mContainerId' on a null object reference 
    at android.app.BackStackRecord$1.onPreDraw(BackStackRecord.java:1131) 
    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1970) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
    at android.view.Choreographer.doFrame(Choreographer.java:550) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

getFragmentManager().beginTransaction() 
      .remove(listFragment) 
      .commit(); 

最後のコードでクラッシュを受けました。

UPDATE

私はそれはもう何のクラッシュを持っていない取り除いた後:

Transition slideTransition = TransitionInflater.from(ParkmeApplication.getContext()).inflateTransition(R.transition.slide_right); 
setExitTransition(slideTransition); 

slide_right:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> 
    <slide 
     android:duration="@android:integer/config_shortAnimTime" 
     android:slideEdge="right"/> 
</transitionSet> 
+0

なぜあなたは明示的フラグメントを削除する代わりにbackstackするためにそれを追加している:?

これは、実際のコードでしたか –

+0

@MohammedAtif特定の変更を行うためのコード行がいくつかあります。 – Magirus

+0

[NullPointerExceptionとは何か、それを修正するにはどうすればいいですか?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) ) – Zoe

答えて

1

getFragmentManager()メソッドを使用せず、代わりにgetSupportFragmentManager()を使用し、v4.app.Fragmentクラスから拡張します。 私はandroid.app.Fragmentから移動した後、クラッシュせずに現在動作しています。

だから私はあなたのような用途がgetFragmentManager()であり、あなたのアプリで使用されているライブラリをサポートしていれば、サポートマネージャに移動するだけです。それはあなたのために働いています。または、私がしたようにいくつかの奇妙なバグでクラッシュすることができます。私にアドバイスを与える時間がある人のおかげで!

0

置き換える機能がR.id.list_holderで以前に追加された断片を削除新しいフラグメントを追加します。したがって、フラグメントを削除すると、replace関数によってすでに削除されているため、フラグメントを見つけることができません。

0

私は同様の問題を抱えていましたが、レイアウトに最初のフラグメントを追加するときに間違ってaddToBackStack()と呼ぶことになりました。それを取り外して、それはうまく動作します。 それはOのようなより高いAndroidレベルで動作していることは明らかです。

0

FragmentManagerには存在しないフラグメントにフラグメントの取引をしながら、私はこのエラーを取得しました:「mytagという」と

fragmentTransaction.hide(fragmentManager.findFragmentByTag("MyTag"));

断片はFragmentManagerには存在しないので、FragmentTransaction試みはヌルに仕事をします断片。

0

フラグメントマネージャからヌルを削除しようとしました。

broadcastFragment = null; 
getSupportFragmentManager().beginTransaction().remove(broadcastFragment).commit(); 
関連する問題