如果已经打开该片段,如何防止从导航抽屉打开片段

时间:2016-10-08 13:57:21

标签: android android-studio android-fragments navigation-drawer

如果该片段已经打开,如何阻止从导航抽屉打开片段,打开片段并在NavigationDrawer项目中单击片段再次重新创建,那么如何检查片段是否已经打开?

 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);

    }

3 个答案:

答案 0 :(得分: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();
    } }

答案 1 :(得分:0)

  

例如我在片段B中,当我点击片段B时   再次从它重新创建的NavigationDrawer,所以如何检查是否   片段已经显示在屏幕上了吗?

如果您引用了NavigationDrawer中的片段B,则可以致电mFragmentB.isAdded()以了解它是否已经显示。

答案 2 :(得分: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;

}

根据上述方法返回的值,您可以添加片段(如果尚未添加)。