这是我的代码,首先:
@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
Icon会出现,但不响应触摸。上面的第二项并不像我想的那样隐藏。
我究竟做错了什么?
按要求编辑
这只在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>
我通过直接从支持库导入ListFragment
来修复它。这样做可以让supportInvalidateOptionsMenu
得到认可,然后一切运作良好。