0

私はナビゲーションドロワーを持つアプリケーションを作っています。それらの断片の中で、他の活動に行くことが可能です。戻るボタンをクリックすると、ナビゲーション・ドロワーの現在の断片に戻りたいと思います。たとえば、私はフラグメントメッセージを持っています。次に、指定されたチャットのフラグメント内をクリックするので、詳細が表示されます。それから私は再びメッセージの断片に戻りたいと思います。私はフラグメントのバックスタックを使用することを考えていましたが、それを行う正しい方法がわからないのです。ここで私のコードはどのようにナビゲーションドロワー内の断片を作成しています。 ChatDetailActivityで例えばAndroid - アクティビティからのフラグメント間の移動

Fragment fragment = null; 
    Class fragmentClass = null; 
    android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
    switch (menuItem.getItemId()) { 
     case R.id.nav_profile: 
      fragmentClass = HomeFragment.class; 
      break; 
     case R.id.nav_inbox: 
      fragmentClass = ChatFragment.class; 
      break; 
     case R.id.nav_map: 
      fragmentClass = MapFragment.class; 
      break; 
     case R.id.nav_dog_breed: 
      fragmentClass = DogBreedsFragment.class; 
      break; 
     case R.id.nav_reminder: 
      fragmentClass = ReminderFragment.class; 
      break; 
     case R.id.nav_favourite_dog_breeds: 
      fragmentClass = FavouriteDogBreedsFragment.class; 
      break; 
     case R.id.nav_help: 
      Intent intent = new Intent(MainActivity.this, HelpActivity.class); 
      startActivity(intent); 
      finish(); 
      break; 
     case R.id.nav_settings: 
      Intent intent2 = new Intent(MainActivity.this, SettingsActivity.class); 
      startActivity(intent2); 
      finish(); 
      break; 
     case R.id.nav_logout: 
      ((FirebaseApplication) getApplication()).signOutUser(this); 
      break; 
     default: 
      fragmentClass = HomeFragment.class; 

    } 

    try { 
     fragment = (Fragment) fragmentClass.newInstance(); 
    } catch (Exception e) { 
     Log.e(TAG, "Failed to obtain the fragment"); 

    } 

    if (fragment != null && fragmentClass != null) { 
     fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit(); 
    } 

私はChatFragment

@Override 
public void onBackPressed() { 
    // here I would need to return to the current fragment 
} 

+0

いくつかのコードを共有します –

答えて

0

フラグメントbackstackが移動するための方法である任意のアドバイスをありがとうを取得する必要があります。あなたのフラグメントをトランザクションをバックスタックに置き換えます。バックボタンを押すと、元のフラグメントに戻ります。

fragmentManager.beginTransaction() 
    .replace(R.id.content_main, fragment) 
    .addToBackStack(null) 
    .commit(); 

あなたはナビゲーションの引き出しから活動を開始した後、同じフラグメントに戻したい場合は、アクティビティを起動する前に、現在のフラグメントの名前(そしておそらく状態)を保存する必要があります。ナビゲーション・ドロワー・アクティビティーがリストアされたら、保管されている状態がないかどうかを確認して復元します。

+0

私が正しく理解していれば、メインのアクティビティ内にあるフラグメントの名前をナビゲーションドロワーに保存する必要があります。どうすればこれを達成できますか? – user3637775

+0

@ user3637775あなたは 'onSaveInstanceState()'を使うことができます。 – Rohan

関連する問題