Одинаковое меню во всех видах деятельности в Android - PullRequest
31 голосов
/ 17 июля 2010

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

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

Привет

Сунил

Ответы [ 3 ]

63 голосов
/ 17 июля 2010

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

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

3 голосов
/ 21 ноября 2012

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

@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 удалит пункт меню с идентификатором ресурса, который вы ему передадите. Надеюсь, это поможет тем, кто сталкивается с этой проблемой.

Спасибо, и с удовольствием поделимся этим постом.

1 голос
/ 11 марта 2015

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