使用AppCompat在Fragment中调用invalidateOptionsMenu()

时间:2014-11-05 18:25:30

标签: android android-appcompat android-optionsmenu

这是我的代码,首先是:

   @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主题。我听说如果您使用AppCompatsupportInvalidateOptionsMenu();,还有另一种方式可以调用此方法,但这是无法识别的。

当我启动应用时会发生什么情况FragmentSearchView图标确实出现,但不响应触摸。上面的第二项并不像假设那样隐藏。

我做错了什么?

按要求编辑

仅在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>

1 个答案:

答案 0 :(得分:0)

我通过直接从支持库导入ListFragment来修复它。这样做可以让supportInvalidateOptionsMenu得到认可,然后一切运作良好。