我们在应用程序中使用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);
}
}
答案 0 :(得分:0)
找到解决方法。如果我调用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);
}
}