36

私のプロジェクトには10​​〜15の活動があります。主にすべてのアクティビティでオプションメニューを使用したいと思います。それなら、私たちが1つの場所でそれを行うことができる方法であり、それはすべての活動に現れます。

また、オプションメニューを非表示にしたいところもあります。それで、それは可能ですか、それとも私はすべての活動でオプションメニューコードを書かなければなりません。

よろしく

スニール

4

4 に答える 4

70

Activityを拡張し、オーバーライドして機能するクラス(たとえばBaseActivity )を作成します。onCreateOptionsMenuonOptionsItemSelected

public class BaseActivity extends Activity {

    // Activity code here

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item:
                // do what you want here
                return true;
            default:
               return super.onOptionsItemSelected(item);
        }
    }
}

ここで、他の15〜16のアクティビティでは、アクティビティを拡張する代わりに、BaseActivityを拡張する必要があります。

public class FooActivity extends BaseActivity { 

    // Activity code here

}

このようにして、すべてのアクティビティがオプションメニューを導き出します。オプションメニューを無効にしたいアクティビティの場合、その特定のアクティビティで再度オーバーライドできます。

public class BarActivity extends BaseActivity { 

    // Activity code here

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Do Nothing
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Do Nothing
   }
}

うまくいけば、マニフェストファイルに問題が発生することはありません。

于 2010-07-17T04:28:01.727 に答える
3

この問題の解決策は、新しいアクティビティでこのメニューメソッドを追加することです。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_home_page, menu);
    menu.removeItem(R.id.logout);
    return true;
}

各アクティビティで、このメソッドが自動的に表示されます。

そうでない場合は、inflate呼び出しで追加します。onCreateOptionsMenuこれには、xmlリソース(元のアクティビティで使用したものと同じ)と、メソッドに渡されるメニューオブジェクトの2つのパラメーターが必要です。

menu.removeItem渡したリソースIDのメニュー項目を削除します。これがこの問題に直面している人々に役立つことを願っています。

ありがとう、そしてこの投稿を共有して幸せです。

于 2012-11-20T20:30:48.270 に答える
1

を拡張するだけでは十分ではありません。他のアクティビティでこれをBaseActivity呼び出して、いいねする必要がありsuper.onCreateOptionsMenu(menu)ます。super.onOptionsItemSelected(item)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    //getMenuInflater().inflate(R.menu.menu_second, menu);  <- remove this
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}
于 2015-03-10T22:52:24.367 に答える
0

これは11年前に尋ねられ、Androidはそれ以来大きく変更されました。受け入れられた回答は、単にでBaseActivityはなく拡張する必要があるという事実を除いて機能します。そうでない場合、メニューは表示されません。残りのコードはまったく問題ありません。AppCompatActivityActivity

于 2022-03-04T11:40:18.347 に答える