2017-06-27 24 views
1

私はフラグメントを使用しているアプリケーションを作成しています。以前のフラグメントをリロードせずに別のフラグメントから前のフラグメントに戻したいと思います。前のフラグメントは、もはやその内容と使用できなくなりますので、あなたの断片を交換するリロードせずに前のフラグメントに移動

FragmentManager fm = getActivity().getSupportFragmentManager(); 

fm.popBackStack ("fragment6", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
+0

は、なぜあなたは、単に '第2のフラグメントをfinish'ませんか? – Dennis

答えて

1

前のフラグメントに行くため

Fragment newFragment; 
android.support.v4.app.FragmentManager manager = ((AppCompatActivity) context).getSupportFragmentManager(); 
FragmentTransaction transaction = manager.beginTransaction(); 
newFragment = new Inner_details(); 
transaction.replace(R.id.content_data, newFragment); 

transaction.addToBackStack("fragment6"); 

transaction.commit(); 

コード:次のフラグメントに行くための

コード「置換」の代わりに「追加」を使用してフラグメントをロードしようとする場合があります。

transaction.add(R.id.content_data, newFragment); 
+0

https://developer.android.com/training/basics/fragments/communicating.html これをお読みください。 – Dennis

+0

その作業に感謝します... –

+0

この方法であなたのフラグメントを追加していて、いくつかのフラグメントを追加している可能性があるので、あなたのフラグメントを終了することを忘れないでください – Meikiem

0

あなたは右からを使用するべきです。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

関連する問題