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 exception4 つの MenuItem のそれぞれに乗っています。ログイン用のメニューとログアウト用のメニューが 1 つずつ必要です。

編集: これは、アクション バー、オーバーフロー メニュー、および 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

での可視性を設定できMenuItemますonPrepareOptionsMenu。そこに移動してみてください。

ボーナスについて: . DOCでは、 menuを押すたびonPrepareOptionsMenuに呼び出されると言われました。表示/非表示のボタン変更パラメーターを 1 つ使用してテストしましたが、すべて問題ありませんでしたbooleanonClickMenuItem

于 2012-08-11T01:36:22.500 に答える