我的活动只包含一个片段容器,我将在其中移动不同的片段。我希望动作栏根据当前片段显示不同的动作图标。例如,当片段1处于活动状态时,我希望动作栏显示导航下拉列表,当片段2处于活动状态时,我希望动作栏不显示任何内容。
我的问题是:
1)在分片替换时更新action bar的合适事件是什么?
2)当片段2变为活动状态时,如何将操作栏恢复到初始状态(移除导航下拉列表或其他内容)?
发布于 2013-09-22 10:36:02
1)在您的活动中存储对菜单的引用。
private Menu mMenu;2)获取onCreateOptionsMenu中菜单的引用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.test_choice, menu);
mMenu = menu;
return super.onCreateOptionsMenu(menu);
}3)然后,您可以在需要时切换更改操作栏中的项,例如,我创建了该方法来更改操作栏项的图标和标题:
private void displayActionBar() {
if (mMenu == null) return;
if (mQuestionStage) {
MenuItem nextItem = mMenu.findItem(R.id.action_testNext);
nextItem.setIcon(R.drawable.navigation_accept);
nextItem.setTitle(getResources().getString(R.string.action_testCheck));
} else
{
MenuItem nextItem = mMenu.findItem(R.id.action_testNext);
nextItem.setIcon(R.drawable.navigation_forward);
nextItem.setTitle(getResources().getString(R.string.action_testNext));
}
}编辑
您可以在需要的地方使用该代码:
ActionBar actionBar = getSupportActionBar();
if (actionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST)
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
else
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);发布于 2013-09-22 11:04:02
我建议您将ActionBar与片段的生命周期一起处理,而不是在不切换片段的情况下更改它(这可能会导致用户的困惑)。
onCreate()方法中,通过setHasOptionsMenu(true)通知活动您想要更改操作栏。如果没有此语句,即使覆盖片断onCreateOptionsMenu(),也不会调用它。onCreateOptionsMenu()来更改actionbar,并在onOptionsItemSelected()方法中处理响应,中的所有。(顺便说一句,如果您不是在处理项目单击,请记住调用super.onOptionsItemSelected() )onBackStackChanged()方法或使用其他方法来正确处理UI(例如,actionbar)。请参阅this android's develop guide article了解详细信息。ps。如果您只想删除特定片段中以前片段的actionbar项,则只需在其onCreateOptionsMenu()中调用menu.clear()即可
https://stackoverflow.com/questions/18939653
复制相似问题