2017-10-13 11 views
0

私はナビゲーション・ドロワー・レイアウトでフラグメントを扱っています。他のフラグメントがframe_containerに表示されるたびに、戻るボタンを押すとHomeFragmentに戻ります。ホームフラグメントが既に表示されている場合は、MainActivity(navigation_drawer_activity)を終了します。メインアクティビティでOnBackPressedのこのコードを修正するのを手伝ってください。HomeFragmentを見つけるためにonBackPressedでfindFragmentByIdを実装する方法

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 

    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_home); 
    if(fragment!=null && fragment.isVisible()){ 
     clearBackStack(); 
     finish(); 
    }else { 
     clearBackStack(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_container,new HomeFragment()).commit(); 
    } 

} 
+0

自由度を管理するためにViewPagerを使用しましたか? – RRTW

+0

フレームレイアウトを使用していません。 –

+0

そしてフラグメントマネージャー。 –

答えて

0

が解決されてみてください。私はframe_containerの断片を見つけました。 を呼び出し、if文でチェックインします。 if(fragment!=null && fragment instanceof HomeFragment && fragment.isVisible())。これはhome_fragmentを返しました。 あなたの答えをありがとう。

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 

    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frame_container); 
    if(fragment!=null && fragment instanceof HomeFragment && fragment.isVisible()){ 
     clearBackStack(); 
     finish(); 
    }else { 
     clearBackStack(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_container,new HomeFragment()).commit(); 
    } 

} 
0

ここでは、この

@Override 
    public void onBackPressed() { 
     FragmentManager fm = getSupportFragmentManager(); 
     if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
      drawerLayout.closeDrawer(GravityCompat.START); 
     } else if (fm.getBackStackEntryCount() > 0) { 
      Log.i("MainActivity", "popping backstack"); 
      getSupportFragmentManager().popBackStackImmediate(); 
     } else { 
      Log.i("MainActivity", "nothing on backstack, calling super"); 
      super.onBackPressed(); 
     } 
    } 
+0

この返された現在のフラグメント。私は押されるたびに活動を終了しました。 –

+0

フラグメントを置き換えるときにaddToBackStackを使用しましたか? –

+0

実際、私は背中を押すと背中全体を反復したくありません。私はちょうど家の断片に直接行きたいです。 –

関連する問題