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

时间:2016-08-18 14:34:29

标签: android android-fragments android-activity android-toolbar

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

2 个答案:

答案 0 :(得分:2)

我认为您可以在每个片段的setHasOptionsMenu(true)方法中onCreate()。和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只是资源中的字符串,分别等于“关闭”和“打开”。有关导航抽屉的更多信息,请参阅此处:Navigation Drawers

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

答案 1 :(得分:1)

分配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>