我使用NavigationDrawer模板,我可以切换我的片段。但我希望在所有片段中更改工具栏功能。如何在片段中设置唯一的工具栏操作?
答案 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>