请给我解释一下。。。我的活动中有导航抽屉
,它与工具栏
同步(比如操作栏
)。活动只有很少的片段,在不同的片段中,我需要使用不同的AppBar
模式(一种模式是视差,另一种模式是简单)。因此,我认为我应该在每个框架中用AppBar和内容设置协调布局
但我如何替换“新建”上的最后一个工具栏以保存与抽屉的同步?或者这是错误的方式,我需要做一些其他的?
如果要使用导航抽屉中不同片段中指定的appbar(工具栏)
,例如不同的选项菜单项,可以在主活动中创建一个公共方法,在其中指定导航抽屉逻辑。
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);
}
toolbarFragment = (Toolbar)getActivity().findViewById(R.id.toolbar);
R.id.toolbar
是您在布局文件中指定的工具栏id,它与您在主工具栏的主要活动中使用的id相同
((MainActivity)getActivity()).setToolbar(toolbarFragment, "Some title");
setHasOptionsMenu(true);
在片段oncreateView()
或onCreateView()
方法中。之后,您可以重写方法onCreateOptionsMenu()
,如下所示
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.custom_menu1, menu);
}
您也可以对抽屉菜单中的其他片段重复此过程。虽然它对我有效,但我不知道这是否违反了活动或破坏了生命周期或导致了内存韭菜。
您可以从每个片段
访问主抽屉布局
,就像下面的代码一样:
AppCompatActivity actionBar = (AppCompatActivity) getActivity();
actionBar.setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) actionBar.findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
getActivity(), drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
不确定我的方法是否好,但我尝试将此公共方法添加到我的活动中:
public void setToolbar(Toolbar toolbar) {
if(toolbar != null) {
setSupportActionBar(toolbar);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
} else {
drawer.setDrawerListener(null);
}
}
我在所有片段中添加了这个:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
((MainActivity)getActivity()).setToolbar(toolbar);
}
@Override
public void onDestroyView() {
((MainActivity)getActivity()).setToolbar(null);
super.onDestroyView();
}
它工作正常,但我不确定它是否会导致内存泄漏或任何其他性能问题。也许有人能帮忙?
我目前正在为我的Android应用程序使用导航抽屉。在我的第一个片段中,有一个片段使用Facebook的Graph API加载数据。因此,当我的应用程序第一次加载时,它首先进入第一个片段。 然后,我使用导航抽屉单击另一个片段并查看它。 最后,我重用导航抽屉返回第一个片段并查看它。 我面临的问题是,我如何继续利用已经创建过一次的片段,而不是在选择导航抽屉项时重新创建它。我的片段切换代码如下所示。 我
我有一个活动a,一个列表片段P和两个片段Q和R。 当应用程序启动时,会创建一个,加载P。根据用户点击的内容,它被Q或R取代。 现在,通过参考本教程,我实现了一个导航抽屉,向用户显示某些项目。然而,由于我在活动中实现了导航抽屉,它显示了所有片段。我希望它只对P可用。 (非常类似于谷歌Gmail应用程序。当用户在主屏幕上时,抽屉就出现了。当用户点击打开电子邮件时,抽屉就会切换到后退按钮) 我不知道如何
我希望能够使用导航抽屉,并根据导航中的选择在不同片段之间进行更改。 我正在使用Android Studio,基本上我所做的是这样的: 使用内置模板“导航抽屉活动”创建了一个新项目 创建了一个空白片段 然后我更改了onNavigationDrawerItemSelected方法中的一些代码。 我的程序崩溃了,给了我很多我不理解的错误。我做错了什么?
我有一个主活动启动导航抽屉。 也有一些片段。 我需要从片段内部更改导航抽屉列表的标题。 我尝试了这个内部片段: 但是到目前为止还没有运气。这是我的主要活动: 在主活动类中使用相同的方法有效,但在片段中无效。我不知道如何更新字符串并通知抽屉此更改!
我的应用程序有两个项目的导航抽屉:一个ViewPager(在一个片段内)和支持Map碎片。 ViewPager使用FragmentStatePagerAdapter并返回两个片段。 当我打开抽屉菜单并选择“项目1”(支持MapFrature)时,另一个碎片(ViewPager在其中)执行,但此方法不会破坏适配器创建的碎片,所以当我再次选择“项目0”时,我的应用程序创建的ViewPager与它的两个
我所拥有的是左导航菜单,我使用抽屉菜单,它可以很好地与片段,我有五个按钮,每个按钮打开一个片段,但现在我希望每个案例打开一个活动,而不是片段,我已经尝试使用意图,但它不起作用!!这是我的代码: 那么,我应该在这段代码中修改什么,使它可以打开一个活动而不是片段???有人能帮我吗?