docから、トランザクションを取り消すことになっています。
私には何が欠けていますか?
docから、トランザクションを取り消すことになっています。
私には何が欠けていますか?
addToBackStack()
ためfragmentTransaction.addToBackStack(null)
にパラメータを試してみてくださいあなたはフラグメントのためだけのオプションのタグであるreplace()
方法でタグを使用していない、バック状態のためのオプションの名前です。 この詳細についてはhereを読むことができます。
私は自分のFragment
スタックを実装:
public Fragment addFragmentToStack(Fragment fragment){
if(MyApplication.fragmentStack.size()>20){
MyApplication.fragmentStack.remove(0);
}
return MyApplication.fragmentStack.push(fragment);
}
public void onBackPressed() {
if (MyApplication.fragmentStack.size() > 0) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_container, MyApplication.fragmentStack.pop());
ft.commit();
}
else{
finish();
}
}
これを行うための正しい方法は、あなたのアプリにイベントをそのバックキャッチするonBackPressed()
方法を使用して、その後、popBackStack()
でbackStackを「ポップ」されます。
public void onBackPressed()
{
// Catch back action and pops from backstack
// (if you called previously to addToBackStack() in your transaction)
if (getSupportFragmentManager().getBackStackEntryCount() > 0){
getSupportFragmentManager().popBackStack();
}
// Default action on back pressed
else super.onBackPressed();
}
PD:たとえば、遅延応答のため申し訳ありませんが、私はちょうどあなたの質問を見ました。それが役に立てば幸い!
それでは、なぜAndroidのドキュメントで間違ったやり方で伝えたのでしょうか。 :( –
私はこのロジックが必要ではないと思います。もしあなたが 'addToBackStack'を使っても、アプリケーションはまったく同じように機能します。 –
すべてのドコモがこれらのコンストラクトの使い方を指しているように見えますが、 'OnBackPressed'にこのコードを追加することで、これを意図した通りに動かすことができます:/ – bc3tech
私はしばらくしていますが、これが誰かを助けることを願っています。
fragmentTransaction.addToBackStack(null)
は、AppCompatActivity
を拡張すると機能しません。それはActivity
でうまくいきます。私は理由を見つけることができませんでした。
[doc](http://developer.android.com/training/implementing-navigation/temporal.html)(「フラグメントに対する後方ナビゲーションの実装」を参照)では、 '.replace'の代わりに' .add'を使用すると言います'。 ここでの回答を確認してください: http://stackoverflow.com/questions/18634207/difference-between-replace-and-addtobackstack しかし、私は '.replace'が完全にサポートされていないと思いますが、' .add'はうまくいくようです正しく – electrocrat
@Abel Pazの答えは、 '.replace'の問題の正しい修正です。 – electrocrat