2013-02-20 20 views
43

私は、フラグメントCfを呼び出すフラグメントBfを呼び出すアクティビティAを持っています。 Cfが呼び出されたときにBfをバックスタックに配置して、ユーザーがそれに戻ることができるようにします。ただし、Cfで特定のボタンが押された場合は、Bfをバックスタックから削除します。これは可能ですか?バックスタックからフラグメントをポップする方法

popBackStack()関数があります。しかし、私はこれがどのように機能するか少し混乱しています。この機能を使うのは安全ですか? Bfの背後に別のアプリケーションのアクティビティが挿入される可能性はありますか?

また、バックスタック上のフラグメントのsavedInstanceStateを変更する方法はありますか?

エミュレータを使用してバックスタックでロバストなテストを実行する方法がわかりません。

+0

回避を含ん!それは全体的な効率を本当に助けません!移動するたびに普通のreplace()を使うか、より良いremove/addを使いましょう! http://stackoverflow.com/questions/5802141/is-this-the-right-way-to-clean-up-fragment-back-stack-when-leaving-a-deeply-nest/26093368#に投稿を確認してください26093368 –

+0

@stack_vedは良い考えではありません。バックスタックは素晴らしいことです。私はあなたの投稿を見ることができません。私はそれがdownvotedされたと思います。 :P – Sufian

答えて

86

フラグメントを名前でポップできます。バックスタックにフラグメントを追加する際に、名前を付けてください。

fragmentTransaction.addToBackStack("fragB"); 
fragmentTransaction.addToBackStack("fragC"); 

はその後Fragment_Cで、名前すなわち... fragBを使用してバックスタックをポップし、スタックをバック使用して POP_BACK_STACK_INCLUSIVE

someButtonInC.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     FragmentManager fm = getActivity() 
       .getSupportFragmentManager(); 
     fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } 
}); 
+9

fm.popBackStackメソッドでもパラメータを渡さなくても動作します。 fm.popBackStack(); – Kailas

+0

戻るボタンを押すとどうしたらいいですか? – Akshay

+0

@Akki backstackにaddを使用している場合、バックナビゲーションアイテムをヒットしたときに追加された最後のフラグメントが既にポップされます。したがって、通常のナビゲーションを実行するための特別な手順は必要ありません。戻るボタンを押したときにオーバーライドする必要があるのは、通常のワンステップバックナビゲーション以外の操作を行う場合だけです。 – ocross

関連する問題