私のプロジェクトには10〜15の活動があります。ほとんどすべてのアクティビティでオプションメニューを使用したい。次に、私たちが1つの場所でそれを行うことができる方法であり、すべてのアクティビティに表示されます。
また、オプションメニューを非表示にしたいものもあります。だから、それは可能ですか、それともすべてのアクティビティでオプションメニューコードを書かなければなりませんか?.
よろしく
スニル
Activityを拡張するクラス(たとえばBaseActivity)を作成し、onCreateOptionsMenu
関数とonOptionsItemSelected
関数をオーバーライドします。
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
呼び出しで追加します。 2つのパラメーター、xmlリソース(元のアクティビティで使用したものと同じ)、およびonCreateOptionsMenu
メソッドに渡されるメニューオブジェクトが必要です。
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);
}