使用AppCompat在Fragment中调用invalidateOptionsMenu()

问题描述 投票:1回答:1

这是我的代码,首先:

   @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();,但这是未被承认的。

当我开始使用这个特定的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>
android android-appcompat android-optionsmenu
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.