Ser*_*nko 5 icons android menu menuitem
我已经尝试了所有可能的解决方案。这是我的代码:
private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_article_detail_menu, menu);
mMenu = menu;
}
void changeStar(boolean added) {
if (mMenu != null) {
MenuItem item = mMenu.findItem(R.id.favourites_item);
if (added) {
Log.d(LOG_TAG, "Set full icon");
item.setIcon(getResources().getDrawable(R.drawable.star_full));
} else {
Log.d(LOG_TAG, "Set empty icon");
item.setIcon(getResources().getDrawable(R.drawable.star_empty));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的菜单xml文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="ssidit.pp.ua.payspacereader.ArticleDetailActivity">
<item
android:id="@+id/refresh_item"
android:title="@string/refresh"
app:showAsAction="never"></item>
<item
android:id="@+id/favourites_item"
android:icon="@drawable/star_empty"
android:title="@string/add_to_favourite"
app:showAsAction="ifRoom"></item>
<item
android:id="@+id/share_item"
android:icon="@drawable/ic_share"
android:title="@string/share"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
app:showAsAction="ifRoom"></item>
</menu>
Run Code Online (Sandbox Code Playgroud)
invalidateMenu()方法无济于事。当我调用setIcon方法时,我的android设备上没有任何变化。
这是我的代码:
private boolean isFavourite;
private void setValues(Cursor cursor) {
Log.d(LOG_TAG, "Setting values");
setData(titleTextView, CursorUtility.getTitle(cursor));
setData(dateTextView, CursorUtility.getDateText(cursor));
setData(timeTextView, CursorUtility.getTimeText(cursor));
isFavourite = CursorUtility.isFavourite(cursor);
getActivity().invalidateOptionsMenu();
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
Log.d(LOG_TAG, "OnPrepareOptionsMenu");
MenuItem item = menu.findItem(R.id.favourites_item);
if (isFavourite) {
Log.d(LOG_TAG, "Set full icon");
item.setIcon(R.drawable.star_full);
} else {
Log.d(LOG_TAG, "Set empty icon");
item.setIcon(R.drawable.star_empty);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,所有内容均已记录。因此,如果不调用某些方法,就不会出错。我也通过获取标题来检查项目。是正确的项目。只是某种黑魔法。
尝试使用invalidateOptionsMenu并将您的changeStar逻辑移至onPrepareOptionsMenu. 来自Android 文档:
public boolean onPrepareOptionsMenu (Menu menu)
Run Code Online (Sandbox Code Playgroud)
添加到 API 级别 1 准备要显示的屏幕标准选项菜单。每次显示菜单时,都会在显示菜单之前调用此函数。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。
默认实现根据活动的状态更新系统菜单项。派生类应始终调用基类实现。
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |