首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是更新操作栏的合适事件?

什么是更新操作栏的合适事件?
EN

Stack Overflow用户
提问于 2013-09-22 10:21:56
回答 2查看 178关注 0票数 1

我的活动只包含一个片段容器,我将在其中移动不同的片段。我希望动作栏根据当前片段显示不同的动作图标。例如,当片段1处于活动状态时,我希望动作栏显示导航下拉列表,当片段2处于活动状态时,我希望动作栏不显示任何内容。

我的问题是:

1)在分片替换时更新action bar的合适事件是什么?

2)当片段2变为活动状态时,如何将操作栏恢复到初始状态(移除导航下拉列表或其他内容)?

EN

回答 2

Stack Overflow用户

发布于 2013-09-22 10:36:02

1)在您的活动中存储对菜单的引用。

代码语言:javascript
复制
private Menu mMenu;

2)获取onCreateOptionsMenu中菜单的引用

代码语言:javascript
复制
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.test_choice, menu);
    mMenu = menu;
    return super.onCreateOptionsMenu(menu);
}

3)然后,您可以在需要时切换更改操作栏中的项,例如,我创建了该方法来更改操作栏项的图标和标题:

代码语言:javascript
复制
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));
    }
}

编辑

您可以在需要的地方使用该代码:

代码语言:javascript
复制
    ActionBar actionBar = getSupportActionBar();
    if (actionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST)
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    else
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
票数 0
EN

Stack Overflow用户

发布于 2013-09-22 11:04:02

我建议您将ActionBar与片段的生命周期一起处理,而不是在不切换片段的情况下更改它(这可能会导致用户的困惑)。

  1. 在您的片段的onCreate()方法中,通过setHasOptionsMenu(true)通知活动您想要更改操作栏。如果没有此语句,即使覆盖片断onCreateOptionsMenu(),也不会调用它。
  2. 通过重写onCreateOptionsMenu()来更改actionbar,并在onOptionsItemSelected()方法中处理响应,中的所有。(顺便说一句,如果您不是在处理项目单击,请记住调用super.onOptionsItemSelected() )
  3. 当按下back键并使用back stack时,请记住重写onBackStackChanged()方法或使用其他方法来正确处理UI(例如,actionbar)。请参阅this android's develop guide article了解详细信息。

ps。如果您只想删除特定片段中以前片段的actionbar项,则只需在其onCreateOptionsMenu()中调用menu.clear()即可

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18939653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档