2017-11-13 6 views
0

フラグメントの状態を保存したいので、フラグメント.add()とフラグメント.show()メソッドを使用します。私は私のmainActivityにフラグメントを追加するために使用 部分はフラグメントに押され、バックにはonBackPressed withフラグメントと保存するフラグメントの状態

android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.add(R.id.main_content, fragment, CURRENT_TAG); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

であり、タグが戻ることでそれに戻って取得するフラグメントを得ることの状態をonBackPressedが

 if (getSupportFragmentManager().findFragmentByTag(CURRENT_TAG) != null) { 
      drawerLayout.closeDrawers(); 
      Runnable mPendingRunnable = new Runnable() { 
       @Override 
       public void run() { 
        android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
        hideTransactions(CURRENT_TAG); 
        fragmentTransaction.show(getSupportFragmentManager().findFragmentByTag(CURRENT_TAG)).commit(); 
       } 
      }; 

をゼロ断片は、T IN、

@Override 
public void onBackPressed() { 
    if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
     drawerLayout.closeDrawers(); 
     return; 
    } 
    if (CURRENT_TAG == TAG_HOME) { 
     return; 
    } 
    navItemIndex = 0; 
    TAG_PREV = CURRENT_TAG; 
    CURRENT_TAG = TAG_HOME; 
    loadHomeFragment(); 
    super.onBackPressed(); 
} 
+0

フラグメント状態を保存しますか?またはあなたが欲しい何か他のもの? –

+0

フラグメント全体を保存したいので、見つけたらfragment.add()をもう一度使用します。fragment.show()を使用します –

+0

フラグメントを追加しないのはなぜですか?これには理由がありますか? –

答えて

0

addToBackStackトランザクションを節約に押し戻さ方法で(TAG_PREVがnullでない返す)権利であります彼のケース:fragmentTransaction.add(R.id.main_content, fragment, CURRENT_TAG);を押し、戻る(onBackPressed)を押すと、その取引を元に戻します。それは以前に追加された断片を削除することを意味します。

+0

これまで私はこれを知らなかった。 バックボタンを使用してトランザクションを保存する方法はありますか? –

+0

追加した後、コミットする前にフラグメントを隠すようにしてください。あなたが戻ってきたら、あなたが隠していた断片をショーに呼び出す必要があります。 – HaroldSer

+0

私はこの点をよく理解していないので、詳細を教えてください。 –

0

バックスタックでフラグメント全体を維持することはできません。アンドロイドチームによって提供される規定はありません。

フラグメントを残しているときに現在の状態/データを保存するには、onSaveInstanceStateを使用する必要があります。

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    Log.i(TAG, " onSaveInstanceState."); 
    savedInstanceState.putString("greeting", "Hello"); 
} 

その後、もう一度その断片に来るときは、使用する必要があります。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String greeting = (savedInstanceState != null) ? savedInstanceState.getString("greeting") : "null"; 
    Log.i(TAG, " onCreate: " + greeting); 
} 

あなたのために働かないと私に教えてください。

+0

onSaveInstanceStateは信頼できないのでお勧めしません。 – HaroldSer

+0

しかし、私はnavigation drawerを使い、transaction.hide()とを使ってフラグメント状態全体を保存しています。 show() –

関連する問題