我的应用程序中有各种类型的片段,ActionBar上有3个图标(过滤,刷新和排序),但我不想在每个片段中显示所有3个图标。我必须根据片段只展示其中一些。
我想用左抽屉做类似的事情。在一些片段上,我想显示左抽屉,而不想在其他片段上显示左抽屉。
我的应用程序中有一个Activity类,我正在附加这些片段,目前我在这个类中处理这两件事,代码已经变得混乱了if-else条件。
所以现在我正在检查片段名称,然后根据它设置操作栏图标和左抽屉属性。
请告诉我一个更好的方法(最好在Fragment中处理它)
谢谢
答案 0 :(得分:3)
片段可以通过getActivity()函数访问其活动,该函数将在调用onAttach()之后(以及onDetach()之前)返回非null活动。一旦片段具有活动,它就可以通过检查手动告诉它在活动中做正确的事情,包括更改操作栏按钮。
答案 1 :(得分:1)
为了显示取决于片段的选项,您只需执行以下操作:
将setHasOptionsMenu(true)
添加到片段的onCreate()
方法,并告诉Activity重绘其选项菜单。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
getActivity().invalidateOptionsMenu();
}
接下来覆盖onCreateOptionsMenu()
方法,为您的片段提供所需的选项。
// No support library - support library api slightly different
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Add Fragment menu elements to Activity menu elements
inflater.inflate(R.menu.myfragmentmenu, menu);
super.onCreateOptionsMenu(menu,inflater);
}
最后,请确保捕获活动的onOptionsItemSelected()
方法中的所有选项。
(重要提示:请确保替换片段而不是添加片段。否则将为每个片段调用onCreateOptionsMenu()
。)
要禁用和启用抽屉,您可以将以下方法添加到您的活动中并从您的片段中调用它:
public void toggleDrawer(boolean enabled) {
if (enabled) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
mDrawerToggle.setDrawerIndicatorEnabled(true);
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerToggle.setDrawerIndicatorEnabled(false);
}
}
答案 2 :(得分:0)
从名为ActionBarCombat的示例项目创建一个新项目,并在此处下载此示例应用程序http://www.learn2crack.com/2014/06/android-sliding-navigation-drawer-example.html
我曾经将这两个结合起来,提出了一个具有操作栏属性以及左侧抽屉的应用程序
答案 3 :(得分:0)
为了构建你的代码,为什么不在你的活动中创建一些方法,比如displayRefreshIcon(boolean visible),你可以在其中处理这些项目的可见性。
从你的片段中你可以通过getActivity()函数调用这些方法(如frangulyan建议)。 if(getActivity()!= null&& getActivity()instanceof MyActivity){ ((MyActivity)getActivity())displayRefreshIcon(真)。 }
答案 4 :(得分:0)
在主线程或通常情况下,在某种程度上不可能对活动本身进行更改,因为片段是分离的模块,它们附加了活动但不是它们的一部分。 但是有一个快捷方式是将消息(处理程序)发送到活动以更新显示相应的操作栏组件 (最有可能的情况是,如果您仅将此片段用于特定活动)。
答案 5 :(得分:0)
你应该创建一个基本片段,每个片段应该扩展baseFragment,在onResume方法中你必须检查Fragment的实例,然后根据它们你可以更新actionBar View。
答案 6 :(得分:0)
使用任何类型的片段,您应该只能访问这些方法(您必须覆盖它们):onCreateOptionsMenu,onPrepareOptionsMenu和onOptionsItemSelected。这些方法应该为您提供足够的句柄来为每个片段创建一个菜单。您可以为每个片段创建一个菜单布局文件,并在设计的方法中处理它们。方法:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.overviewmenu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}