根据登录状态对Android OptionsMenu进行充气

时间:2012-08-10 16:09:20

标签: android android-menu android-optionsmenu

这是我的代码:

  @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);
        }
    }

我在四个MenuItem的每一个上获得Null pointer exception。 我只想要一个登录菜单,一个登出。

编辑:这是一个使用Action Bar,Overflow菜单和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>

1 个答案:

答案 0 :(得分:2)

您可以在MenuItem中设置onPrepareOptionsMenu的可见性。试着搬到那里。

关于奖金 :.在DOC他们告诉onPrepareOptionsMenu每次都叫 ,按菜单。我测试了一个按钮更改boolean param onClick来显示/隐藏MenuItem,一切都很好