1

我正在开发一个实现 ActionbarCompat 的 API 7+ 应用程序。

目前,我在 ActionBar 上有一个带有“收藏夹”图标的活动,我正在尝试找到一种在收藏夹和不收藏夹之间切换图形的方法。

我在 onCreateOptionsMenu、onPrepareOptionsMenu 和 onOptionsItemSelected 中进行的所有努力都失败了,看来图标只能在创建时更改,而不能在活动已经运行时更改。

有没有人遇到过在运行时更改其中一个 ActionBarCompat 项目图标的方法,同时使用 ActionBarCompat 可见活动,并且仍然保持与 API 11+ 上的本机 ActionBar 的兼容性?

4

2 回答 2

0

您需要实现一些基本逻辑onCreateOptionsMenu()来检查项目是否被收藏并根据该逻辑更改图标。

在您的setFavourite()方法中,您需要:

setFavourite() {
    ....
    if (changedFavourite)
       invalidateOptionsMenu()

请参阅此处的文档:http: //developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu ()

这应该会迫使 ABS 重新绘制。

于 2012-07-11T16:01:41.583 回答
0

受@mobinvent 评论的启发,我发现以下内容为使用 ActionBarCompat 的预 HoneyComb 设备提供了按照 HoneyComb 及更高版本上的 invalidateOptionsMenu() 的选项菜单生命周期排序。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) invalidateOptionsMenu();
else {
    supportInvalidateOptionsMenu();
    openOptionsMenu();
    closeOptionsMenu();
}

请注意打开选项菜单并关闭它的 hacky 要求。在我的特定实例中,我从 onActivityResult 调用它,在这个阶段似乎没有引入任何难看的菜单闪烁。

很好地摆脱了前 ActionBar 操作系统/设备!

于 2013-09-20T20:54:04.457 回答