0

这是我的代码:

  @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search)
                .getActionView();
        searchView.setSearchableInfo(searchManager
                .getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(true);
        searchView.setSubmitButtonEnabled(true);
        return true;
    }

    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        MenuItem Login = menu.findItem(R.id.Login);
        MenuItem Logout = menu.findItem(R.id.Logout);
        MenuItem About = menu.findItem(R.id.About);
        MenuItem Profile = menu.findItem(R.id.Profile);

        // set the menu options depending on login status
        if (LoggedStatus == true) {
            // show the log out option
            Logout.setVisible(true);
            Login.setVisible(false);

            Profile.setVisible(true);
            About.setVisible(true);
        } else {
            // show the log in option
            Logout.setVisible(false);
            Login.setVisible(true);

            Profile.setVisible(false); // hide
            About.setVisible(true);
        }

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        case R.id.Login:
            Intent i = new Intent(this, Login.class);
            startActivity(i);

            return true;
        case R.id.Logout:

            return true;
        case R.id.Profile:

            return true;
        case R.id.About:

            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

我正在Null pointer exception处理四个 MenuItem 中的每一个。我只想要一个用于登录的菜单和一个用于注销的菜单。

编辑:这是一个利用操作栏、溢出菜单和 Android 4.0+ 以及更多代码的应用程序。 这是menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="always"
        android:title="search"/>
    <item
        android:id="@+id/Login"
        android:title="Login"/>
    <item
        android:id="@+id/Logout"
        android:title="Logout"/>
    <item
        android:id="@+id/Profile"
        android:title="My Profile"/>
    <item
        android:id="@+id/About"
        android:title="About"/>

</menu>
4

1 回答 1

2

您可以设置 in 的可见MenuItemonPrepareOptionsMenu。试着搬到那里。

关于奖金:。在DOC中,他们告诉您每次按 menu时onPrepareOptionsMenu都会调用它。我用一键更改参数进行测试以显示/隐藏,一切都很好booleanonClickMenuItem

于 2012-08-11T01:36:22.500 回答