必须有一些基本的东西,我还没有完全理解片段管理。
这是我应用的当前架构:
MenuActivity.java
)FrameLayout
,使用FragmentManager/Transaction
替换为片段。onCreateOptionsMenu
以添加它们自己的菜单位。问题在于,当我使用抽屉菜单切换标签时,某些选项会保留在操作栏中。此外,接收对onOptionsItemSelected
的调用的片段始终是所选的最后一个片段。
MainActivity.java
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = null;
String tag = "";
switch(position) {
case 0:
tag = "tours_main_fragment";
fragment = new ToursMainFragment();
mTitle = getString(R.string.title_section1);
break;
case 1:
tag = "motos_main_fragment";
fragment = new MotoMainFragment();
mTitle = getString(R.string.title_section2);
break;
}
if(fragment != null) {
fragmentManager
.beginTransaction()
.replace(R.id.container, fragment, tag)
.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
getMenuInflater().inflate(R.menu.menu, menu);
restoreActionBar();
return false;
}
return super.onCreateOptionsMenu(menu);
}
答案 0 :(得分:1)
我认为您正在使用DrawerLayout进行导航,并使用基于导航抽屉中所选项目的相应片段替换主Activity布局中的片段容器。
打开/关闭抽屉时,您可能希望使选项菜单无效。如活动API中所述:
public void invalidateOptionsMenu()
在API级别11中添加 声明选项菜单已更改,因此应重新创建。 onCreateOptionsMenu(Menu)>方法将在下次需要显示时调用。
所以在切换抽屉时调用它应该有助于根据片段重新创建菜单选项。示例代码:
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getSupportActionBar().setTitle(mTitle);
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getSupportActionBar().setTitle(mDrawerTitle);
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}