这是我的代码,首先是:
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
try {
menu.findItem(R.id.action_user_search).setVisible(true);
menu.findItem(R.id.action_view_spots).setVisible(false);
getActivity().invalidateOptionsMenu();
} catch (Exception e) {
// do nothing; always null when looking at other people's profile
}
}
这发生在Fragment中。我在这篇文章中使用了最新的AppCompat
主题。我听说如果您使用AppCompat
,supportInvalidateOptionsMenu();
,还有另一种方式可以调用此方法,但这是无法识别的。
当我启动应用时会发生什么情况Fragment
,SearchView
图标确实出现,但不响应触摸。上面的第二项并不像假设那样隐藏。
我做错了什么?
按要求编辑
仅在ActionBarActivity
而非Fragment
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
toggleSlidingMenu();
return true;
case R.id.action_view_spots:
Intent mapLoc = new Intent(MainActivity.this,
MapLocationsActivity.class);
startActivity(mapLoc);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
这是我的XML
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_user_search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
android:title="Find User"/>
<item
android:id="@+id/action_view_spots"
android:icon="@android:drawable/ic_menu_mapmode"
app:showAsAction="ifRoom"
android:title="Map View"/>
</menu>
答案 0 :(得分:0)
我通过直接从支持库导入ListFragment
来修复它。这样做可以让supportInvalidateOptionsMenu
得到认可,然后一切运作良好。