2013-08-19 11 views
6

ません。バックボタンをクリックすると、私は<code>addToBackStack()</code>を使用して<code>replace</code><code>FragmentTransaction</code>を逆転することができるようにしたいもの

docから、トランザクションを取り消すことになっています。

私には何が欠けていますか?

+2

[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

+0

@Abel Pazの答えは、 '.replace'の問題の正しい修正です。 – electrocrat

答えて

4

addToBackStack()ためfragmentTransaction.addToBackStack(null) にパラメータを試してみてくださいあなたはフラグメントのためだけのオプションのタグであるreplace()方法でタグを使用していない、バック状態のためのオプションの名前です。 この詳細についてはhereを読むことができます。

+0

私はタグが必要です。 – jul

+0

はい、フラグメントを参照するためにタグを保持できますが、 'addToBackStack(null)'を使用していますか?これを使うとどうなりますか? –

+0

私には意味がないので試していません。そこで私は自分自身の 'Fragment'スタックを実装しました(私の答えを見てください)。 – jul

0

私は自分の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(); 
     } 
} 
24

これを行うための正しい方法は、あなたのアプリにイベントをそのバックキャッチする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:たとえば、遅延応答のため申し訳ありませんが、私はちょうどあなたの質問を見ました。それが役に立てば幸い!

+0

それでは、なぜAndroidのドキュメントで間違ったやり方で伝えたのでしょうか。 :( –

+2

私はこのロジックが必要ではないと思います。もしあなたが 'addToBackStack'を使っても、アプリケーションはまったく同じように機能します。 –

+0

すべてのドコモがこれらのコンストラクトの使い方を指しているように見えますが、 'OnBackPressed'にこのコードを追加することで、これを意図した通りに動かすことができます:/ – bc3tech

2

私はしばらくしていますが、これが誰かを助けることを願っています。

fragmentTransaction.addToBackStack(null)は、AppCompatActivityを拡張すると機能しません。それはActivityでうまくいきます。私は理由を見つけることができませんでした。

関連する問題

 関連する問題