我的活动只包含一个片段容器,我将在其中移动不同的片段。我希望操作栏根据当前片段显示不同的操作图标。例如,当片段1处于活动状态时,我希望操作栏显示导航下拉列表,当片段2处于活动状态时,我希望操作栏不显示任何内容。
我的问题是:
1)更换片段后更新操作栏的正确事件是什么?
2)当片段2变为活动状态时,如何将操作栏恢复到初始状态(删除导航下拉列表以及其他可能的东西)?
答案 0 :(得分:0)
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);
答案 1 :(得分:0)
我建议您处理ActionBar以及Fragment的生命周期,而不是在没有片段切换的情况下更改它(这可能会导致用户混淆)。
在片段的onCreate()
方法中,通过setHasOptionsMenu(true)
通知活动您要更改操作栏。如果没有此语句,即使您覆盖它,也不会调用您的片段onCreateOptionsMenu()
。
通过覆盖onCreateOptionsMenu()
来更改操作栏,并使用onOptionsItemSelected()
方法处理响应,所有碎片。 (顺便说一句,如果您没有处理项目点击,请记得致电super.onOptionsItemSelected()
)
当按下后退键并使用后台堆栈时,请记住覆盖onBackStackChanged()
方法或使用其他方法正确处理UI(例如,操作栏)。有关详细信息,请参阅this android's develop guide article。
PS。如果您只是想删除特定片段中的先前片段的操作栏项,只需在menu.clear()
onCreateOptionsMenu()