当我尝试通过调用MenuCompat.setActionView(menuitem,null)从操作栏中删除actionview时,我最终得到了一个看不见且无法点击的菜单项。菜单项刚刚消失,只有当我调用setActionView传递布局时它才会显示。如果我调用invalidateOptionsMenu(),它会显示但产生一些奇怪的结果,比如在我需要时不显示进度条。
这是同时删除和添加actionView的功能。它是一个刷新动作:
public void refresh(boolean refreshing, boolean fragment) {
if(refreshing == refreshed) {
return;
}
refreshed = refreshing;
final MenuItem refreshItem = optionsMenu.findItem(R.id.menu_refresh);
if (optionsMenu != null) {
if (refreshItem != null) {
if (refreshing) {
MenuItemCompat.setActionView(refreshItem, R.layout.actionbar_indeterminate_progress);
MenuItemCompat.expandActionView(refreshItem);
if(fragment)
((PhotoGridPagerFragment) fm.findFragmentByTag(TAG_FOR_PHOTO_GRID_PAGER_FRAGMENT)).refresh();
} else {
MenuItemCompat.setActionView(refreshItem, null);
}
}
}
}
答案 0 :(得分:0)
MenuItemCompat.setActionView(refreshItem,R.layout.actionbar_indeterminate_progress);
我认为你不能只发送一个布局ID。您需要先将其充气,然后将其作为参数传递:
View newView = getLayoutInflater().inflate(R.layout.actionbar_indeterminate_progress);
MenuItemCompat.setActionView(refreshItem, newView);
但我们没有足够的信息确定: optionsMenu在哪里定义?
答案 1 :(得分:0)
也许你忘了为MenuItem设置一个图标。
<item
android:id="@+id/refreshMenuItem" android:title="@string/refresh"
app:showAsAction="always" android:icon="@mipmap/refresh" />