あなたは右からを使用するべきです。addToBackStackメソッド。断片Backstack
すべての断片の取引の記録を管理する
はFragmentManagerによって、各活動のために維持されます。これを正しく使用すると、ユーザーはデバイスの戻るボタンを押して以前に追加したフラグメントを削除できます(戻るボタンがアクティビティを削除する方法とは異なります)。プログラム
// Create the transaction
FragmentTransaction fts = getSupportFragmentManager().beginTransaction();
// Replace the content of the container
fts.replace(R.id.flContainer, new FirstFragment());
// Append this transaction to the backstack
fts.addToBackStack("optional tag");
// Commit the changes
fts.commit();
が、あなたはまた、マネージャを介していつでも戻ってスタックからポップすることができます:単純に記録されるべき各FragmentTransactionにaddToBackstackを呼び出す
FragmentManager fragmentManager = getSupportFragmentManager();
if (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStack();
}
このアプローチでは、我々は簡単に保つことができますどのフラグメントが画面上に動的に表示され、ユーザは以前のフラグメントに容易にナビゲートすることができるかの履歴が表示されます。
例:我々は戻るボタンホームフラグメントにログインフラグメントおよびユーザークリックでいるとき ロードする必要があります:
これはSenarioあるボタンをクリックすると
Framelyout内部フラグメントログインを置き換えます:
fragmentManager.beginTransaction().replace(R.id.your_placeholder, new Fragment_Login()).addToBackStack("login").commit();
、あなたがアプリケーションに戻るボタンをクリックすると、最後のフラグメント(最後backStackであるフラグメント)は、ログインフラグメントの家を交換する場合は、最初の最後の断片が何であるかを確認してくださいでframeLayoutに:詳細情報および例えば
public void onBackPressed() {
int index = fragmentManager.getBackStackEntryCount() - 1;
String tag = fragmentManager.getBackStackEntryAt(index).getName();
// Fragment fragment = fragmentManager.findFragmentByTag(tag);
switch (tag) {
case "login":
fragmentManager.beginTransaction().replace(R.id.your_placeholder, new HomePage_Fragment()).addToBackStack("home").commit();
break;
}
は、このサイトを見て:
https://www.survivingwithandroid.com/2013/04/android-fragment-transaction.html
は、なぜあなたは、単に '第2のフラグメントをfinish'ませんか? – Dennis