【问题标题】:Actionbar menu item with submenu doesn't work on Android 4.4 after long click长按后,带有子菜单的操作栏菜单项在 Android 4.4 上不起作用
【发布时间】:2014-02-03 18:21:29
【问题描述】:

我们在应用程序中使用 ActionBar。它包含几个带有图标的菜单项。其中之一是右上角的“帮助”。它有包含一些项目的子菜单。如果用户长按菜单项,则 ActionBar 显示工具提示。同样在 Android 4.4 上,如果用户单击带有子菜单的菜单项并向下滑动手指,它会展开子菜单。

有一段时间,用户会同时看到工具提示和展开的子菜单。问题是,在单击其中一个子菜单项后,根菜单项不再起作用,它不会展开子菜单甚至突出显示。但是 ActionBar 上的其他菜单项仍然有效。似乎这是 Android 的 ActionBar 实现中的错误。工具提示和子菜单在 Android 4.4 上都有一些新的动画效果,所以它们可能存在一些并发问题。

我目前正在寻找任何解决方法。任何帮助将不胜感激。

菜单 xml 声明。

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/rate"
        android:icon="@drawable/rate_button_bg"
        android:title="@string/menu_rate_title"
        android:showAsAction="always" />

    <item
        android:id="@+id/like"
        android:icon="@drawable/like_button_bg"
        android:title="@string/menu_like_title"
        android:showAsAction="always" />

    <item
        android:id="@+id/share"
        android:icon="@drawable/share_button_bg"
        android:title="@string/menu_share_title"
        android:showAsAction="always" />

    <item
        android:id="@+id/help"
        android:icon="@drawable/global_icon_help"
        android:title="@string/menu_help_title"
        android:showAsAction="always">
        <menu>
            <item
                android:id="@+id/item_quick_start"
                android:showAsAction="always"
                android:title="@string/quick_start_tour_text" />

            <item
                android:id="@+id/item_faq"
                android:showAsAction="always"
                android:title="@string/frequently_asked_questions_text" />

            <item
                android:id="@+id/item_help"
                android:showAsAction="always"
                android:title="@string/contact_customer_support_text" />

        </menu>
    </item>

</menu>

创建菜单:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_home, menu);
    return true;
}

处理点击次数:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (R.id.item_quick_start == item.getItemId()) {
        // do some stuff
        return true;
    } else if (R.id.item_faq == item.getItemId()) {
       // do some stuff            
       return true;
      ...
    } else {
        // Default value
        return super.onOptionsItemSelected(item);
    }
}

【问题讨论】:

  • 显示你的代码,这将有助于理解你的问题。

标签: android android-actionbar submenu long-press


【解决方案1】:

找到解决方法。如果我调用 invalidateOptionsMenu();然后菜单项仍然有效。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (R.id.item_quick_start == item.getItemId()) {
        // do some stuff
        invalidateOptionsMenu();
        return true;
    } else if (R.id.item_faq == item.getItemId()) {
       // do some stuff            
       invalidateOptionsMenu();
       return true;
      ...
    } else {
        // Default value
        return super.onOptionsItemSelected(item);
    }
}

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多