如何在Navigation Drawer上实例化重用片段?

时间:2017-11-26 16:19:23

标签: android android-fragments fragment navigation-drawer

我需要为每个导航项使用带有不同片段的android导航抽屉,但我的问题是:

*如何保留片段的实例并在触摸导航项时重复使用它们。

*我不想再次启动已经实例化的片段,一次又一次,用户需要花费很多时间。

任何人都可以帮助我吗?

这是我的一段代码:

public void selectDrawerItem(MenuItem menuItem) {
    // Create a new fragment and specify the fragment to show based on nav item clicked
    Fragment fragment = null;
    Class fragmentClass;
    switch(menuItem.getItemId()) {
        case R.id.nav_inicio:
            fragmentClass = DestaquesFragment.class;
            break;
        case R.id.nav_cardapio:
            fragmentClass = CategoriasFragment.class;
            break;
        case R.id.nav_meusPedidos:
            fragmentClass = MeusPedidosFragment.class;
            break;
        default:
            fragmentClass = DestaquesFragment.class;
    }

    try {
        fragment = (Fragment) fragmentClass.newInstance();
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Insert the fragment by replacing any existing fragment
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.contentCompartilhado, fragment).commit();

    // Highlight the selected item has been done by NavigationView
    menuItem.setChecked(true);
    // Set action bar title
    setTitle(menuItem.getTitle());
    // Close the navigation drawer
    drawer.closeDrawers();
}

1 个答案:

答案 0 :(得分:1)

当你替换你的片段时,为它设置一个标记名称,以便稍后检索它以重复使用它。

getFragmentManager().beginTransaction().replace(R.id.fragmentContentPlaceHolder,yourFragment,"yourFragment").addToBackStack("yourFragment").commitAllowingStateLoss();

现在我们在堆栈中有一个名为 yourFragment

的片段

重复使用,我们尝试按标签名称

找到它
  YourFragment yourFragment= (YourFragment)getFragmentManager().findFragmentByTag("yourFragment");
所有人都祝你好运!