2016-07-11 2 views
0

メインアクティビティでフレームレイアウトを作成し、アプリケーションの起動時にフラグメント1をレイアウトに追加しました。この後最初のフラグメントのみを保存する方法

Fragment fr; 
fr = new fragment1(); 
FragmentManager fm = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_place, fr); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

ユーザーがフラグメント1に何かを押したときに、それは2

Fragment2 newFragment = new Fragment2(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(R.id.fragment_place, newFragment); 
transaction.addToBackStack(null); 
transaction.commit(); 

フラグメントを開始します問題は、今私がフラグメント2のボタンをバック押すと、それは1を断片化するために戻りますですフラグメント1をリロードします。もう一度[戻る]ボタンを押すと、フラグメント2に戻ります。誰も私がこの問題について助けてくれるのは、フラグメント1が常に保存され、フラグメント2がユーザーが戻るボタンを押したときに破棄されるようにするためです。

答えて

0

からこの答え、あなたが fragmentTransaction.add書く必要が初めて活動にフラグメントを追加すると(R.id.fragment_placeを、FR)の代わりにfragmentTransaction.replace(R.id.fragment_placeの、 fr);

あなたが初めてMainActivityからの断片1を初期化しているので、あなたのコードは、あなたが私もfragmentTransaction.addToBackStack(null)を削除することがわかり、この

Fragment fr; 
fr = new fragment1(); 
FragmentManager fm = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
fragmentTransaction.add(R.id.fragment_place, fr); 
fragmentTransaction.commit(); 

ようになります。私のコードから。

あなたは1を断片化し、ボタンを押すバックに行くとき、それはあなたがfragmentTransaction.addToBackStack(null)を追加しているためだフラグメント2に戻って返すことを言っ

ので。最初の断片断片に挿入する。それでフラグメント1に戻ると、アンドロイドはフラグメント1のバックスタックにフラグメント2を追加します。したがって、戻るボタンを押すと、フラグメント2に戻ります。

そして、フラグメントから別のフラグメントに行くときあなたはfragmentTransactionを使う必要があります。replace();このことができます。この

Fragment fr; 
fr = new fragment1(); 
FragmentManager fm = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
fragmentTransaction.add(R.id.fragment_place, fr); 
fragmentTransaction.commit(); 

そして

Fragment2 newFragment = new Fragment2(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(R.id.fragment_place, newFragment); 
transaction.addToBackStack(null); 
transaction.commit(); 

希望のような

あなたの最終的なコードを見て!

0

もう一度戻るボタンを押すと、もう一度フラグメント2に戻ります。

あなたがフラグメント2をロードするとき、あなたはbackstackにこれを追加しましたので、これが起こるので、私はフラグメント2のボタンを背面押したときに問題が今、それをコード

Fragment2 newFragment = new Fragment2(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(R.id.fragment_place, newFragment); 
//transaction.addToBackStack(null); <-- remove this 
transaction.commit(); 

のこの行を削除バックフラグメント1に いますが、それはしません再作成の断片バックスタックからの断片に戻るが、同じインスタンスを再使用し、wを起動した場合はフラグメント1

をリロードしますフラグメントライフサイクルのonCreateView()については、Fragment Lifecycleを参照してください。 here

関連する問題