1

フラグメントがすでにオープンされている場合、ナビゲーション・ドロウダー・アイテムをクリックしてフラグメントを再度作成すると、どのように断片が既に開いているかどうかを確認するには?フラグメントが既に開かれている場合、ナビゲーション・ドロワーからフラグメントを開くのを防ぐには

public boolean onNavigationItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

    if (id == R.id.fragmentA) { 
     { FragmentA fragment = new FragmentA(); 
      transaction.add(R.id.main_screen, fragment1, "MainFrag").addToBackStack(null); 
     } 

    } else if (id == R.id.fragmentB) { 
     FragmentB fragment = new FragmentB(); 
     transaction.add(R.id.main_screen, fragment).addToBackStack(null); 

    } else if (id == R.id.fragmentC) { 
     FragmentC fragment = new FragmentC(); 
     transaction.replace(R.id.main_screen, fragment).addToBackStack(null); 

    } 

答えて

1

私はこの方法でそれを解決します。たとえば

public boolean onNavigationItemSelected(MenuItem item) { 

    int id = item.getItemId(); 

    Fragment f = getSupportFragmentManager().findFragmentById(R.id.fragment_container); 
    if (id == R.id.n_1 && !(f instanceof MainFragment)) { 
     MainFragment fragment = new MainFragment(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container, fragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    } } 
0

を私は、フラグメントBに、と私はそれを再作成NavigationDrawerから再びフラグメントB でクリックしたときに、ので、どのように既に フラグメントが画面に表示されているかどうかを確認しますか?

あなたはNavigationDrawerから断片Bへの参照を持っている場合、あなたはそれがすでに示さかいないかどうかを知るためにmFragmentB.isAdded()を呼び出すことができます。

+0

NavigationDarwerからの参照はどういう意味ですか? –

+0

参照を持つと、メソッド 'onNavigationItemSelected(MenuItem item)' – Leo

+0

からオブジェクト 'fragmentB'にアクセスできます。mFragment.isAdded()を試しましたが、動作していません –

0

フラグメントを追加するときにタグを使用して置き換えます。メニュー項目は、タグを使用して目に見えるの断片を取得するために使用するフラグメントマネージャをクリックしている今

transaction.replace(R.id.main_screen, fragment, tag); 

、:まだ追加されていない場合

public boolean isFragmentCurrentlyVisible(String fragmentTag){ 
    Fragment fragmentToTest; 
    fragmentToTest = fragmentManager.findFragmentByTag(fragmentTag); 
    if(fragmentToTest!=null && fragmentToTest.isVisible()) 
     return true; 
    return false; 

} 

は、上記の方法で返された値によっては、フラグメントを追加することができます。

関連する問題