私のプロジェクトには10〜15の活動があります。主にすべてのアクティビティでオプションメニューを使用したいと思います。それなら、私たちが1つの場所でそれを行うことができる方法であり、それはすべての活動に現れます。
また、オプションメニューを非表示にしたいところもあります。それで、それは可能ですか、それとも私はすべての活動でオプションメニューコードを書かなければなりません。
よろしく
スニール
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
}
}
うまくいけば、マニフェストファイルに問題が発生することはありません。
この問題の解決策は、新しいアクティビティでこのメニューメソッドを追加することです。
@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のメニュー項目を削除します。これがこの問題に直面している人々に役立つことを願っています。
ありがとう、そしてこの投稿を共有して幸せです。
を拡張するだけでは十分ではありません。他のアクティビティでこれを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);
}
これは11年前に尋ねられ、Androidはそれ以来大きく変更されました。受け入れられた回答は、単にでBaseActivityはなく拡張する必要があるという事実を除いて機能します。そうでない場合、メニューは表示されません。残りのコードはまったく問題ありません。AppCompatActivityActivity