使用导航抽屉模板更改片段中的工具栏

Change toolbar in fragments with Navigation Drawer template

我使用 NavigationDrawer 模板,我可以切换我的片段。但我想在所有片段中更改工具栏功能。如何在我的片段中设置独特的工具栏操作?

我认为你可以在每个片段的onCreate()方法中setHasOptionsMenu(true)。和通常的 ovveride 方法 onCreateOptionsMenu()。我的意思是像创建菜单时一样扩展菜单和其他内容。

现在要注意的是,您必须将 DrawerListener 设置为 DrawerLayout。然后进入您的侦听器 ovveride 方法 onDrawerOpened()onDrawerClosed(),其中每个方法都必须调用 invalidateOptionsMenu().

使用 android.support.v7.app.ActionBarDrawerToggle 作为您的 DrawerListener。像这样传入方法

myDrawerLayout.addDrawerListener(new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {

            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view)

                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);

                invalidateOptionsMenu();
            }
        };

这里的R.string.drawer_close和drawer_open只是资源中的字符串,分别等于"Close"和"Open"。您可以在此处阅读有关导航抽屉的更多信息:Navigation Drawers.

请注意,您不能在每个片段中使用唯一的工具栏。我的意思是工具栏的实例。至少它对我没有用。而是创建一些工具栏一次,然后在每个片段上更改其内容。要从所有片段访问工具栏,您可以使用一个名为 RetainFragment 的辅助片段,它将使用 setRetainInstance(true)。它可以帮助您不破坏此片段并将不同的变量或对象保存到其中。更详细的可以看我的文章:Simple trick to use and manage Toolbar with Fragments in Android

给你的 NavigationView 分配一个 NavigationItemSelected ClickListener 并在里面做这样的事情:

 switch (e.menuItem.itemId)
            {
                case (R.id.nav_home):
                    e.MenuItem.SetChecked(true);
                    toolbar.inflateMenu(R.menu.newMenu);
                    break;
                case (R.id.nav_two):
                    e.MenuItem.SetChecked(true);
                    toolbar.inflateMenu(R.menu.newMenu2);
                    break;
            }

并在菜单文件夹中创建新的 xml 文件,每个文件都包含不同的工具栏控件。 像这样:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">
 <item android:id="@+id/action_close"
        android:title=""
        android:icon="@drawable/ic_close_white_24px"
        app:showAsAction="always|collapseActionView"/>
  <item android:id="@+id/..."
        android:title=""
        android:icon="..."
        app:showAsAction="always|collapseActionView"/>
</menu>