Подтвердить что ты не робот

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

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

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

Привет

Сунил

4b9b3361

Ответ 1

Создайте класс (скажем 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
   }
}

Надеюсь, это не даст вам проблем в файле манифеста.

Ответ 2

Решение этой проблемы в вашей новой деятельности добавляет этот метод меню.

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

В каждом действии этот метод будет автоматически отображаться.

Если он не добавляет его при вызове inflate. Для этого требуется два параметра: ресурс xml (тот же, который вы использовали в вашем исходном действии), и объект меню, который переходит в метод onCreateOptionsMenu.

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

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

Ответ 3

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