Такое же меню вариантов во всех мероприятиях на Android

У меня 10-15 мероприятий в моем проекте. Я хочу иметь меню опций в основном во всех действиях. Тогда их любой способ мы можем сделать это в одном месте, и это проявляется во всех действиях.

Кроме того, я хотел бы скрыть меню опций в некоторых. Итак, возможно ли это, или мне нужно написать код меню опций во всех действиях.

С уважением

Сунил

Solutions Collecting From Web of "Такое же меню вариантов во всех мероприятиях на Android"

Создайте класс (скажем BaseActivity ), который расширяет Activity и переопределяет функции 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 . Для этого требуется два параметра: ресурс xml (тот же, который вы использовали в вашем первоначальном onCreateOptionsMenu ), и объект меню, который переходит в метод onCreateOptionsMenu .

menu.removeItem удалит пункт меню любого идентификатора ресурса, который вы передадите ему. Надеюсь, это поможет тем, кто сталкивается с этой проблемой.

Спасибо, и я рад поделиться этим сообщением.

Недостаточно просто расширить 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); }