如果您想在不同的片段中使用您在导航抽屉中指定的appbar(toolbar),例如不同的选项菜单项,您可以在指定导航抽屉逻辑的主活动中创建一个公共方法。
public void setToolbar(Toolbar toolbar, String title){
AppCompatActivity actionBar = this;
actionBar.setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout)actionBar.findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toogle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
drawer.addDrawerListener(toogle);
toogle.setDrawerIndicatorEnabled(true);
toogle.syncState();
if(toolbar != null)
toolbar.setTitle(title);
}
现在你可以在你的片段中使用这个方法来访问主工具栏并用你的自定义标题覆盖它,选项菜单......
您可以通过在片段中创建一个新的工具栏变量来做到这一点,然后在
onCreateView() 这样的方法中对其进行膨胀
toolbarFragment = (Toolbar)getActivity().findViewById(R.id.toolbar);
R.id.toolbar 是您在布局文件中指定的工具栏 ID,它与您在主活动中用于主工具栏的 ID 相同。
现在您可以像这样在片段中调用方法
setToolbar(Toolbar toolbar, String title)
((MainActivity)getActivity()).setToolbar(toolbarFragment, "Some title");
如果要为此片段使用选项菜单,则必须调用
setHasOptionsMenu(true);
在片段onCreate() 或onCreateView() 方法中。之后,您可以像这样覆盖方法onCreateOptionsMenu()
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.custom_menu1, menu);
}
您也可以对导航抽屉中的其他片段重复此过程。虽然它对我有用,但我不知道这是否违反活动或碎片生命周期或导致内存韭菜。