различное поведение с методом onCreateOptionsMenu - PullRequest
2 голосов
/ 17 мая 2011

Я нашел что-то смущенное для меня в этой статье http://developer.android.com/guide/topics/ui/menus.html

Ниже приведен простой фрагмент кода и вывод Когда я запускаю приложение на Android 3.0

  1. и 2. Строка системы выполняется, как только действие создано

Строки 3. и 4. были напечатаны при нажатии меню и выборе пункта меню

Probem - это строка 5 и метод buttonHandler, который вызывает invalidateOptionsMenu (); и результатом этих вызовов является строка 6 и 7

Почему системные вызовы onCreateOptionsMenu перед onPrepareOptionsMenu, даже если они написали

На Android 3.0 и выше, вы должны вызывать invalidateOptionsMenu (), когда вы хотите обновить меню, потому что меню всегда открыто. Затем система вызовет OnPrepareOptionsMenu (), чтобы вы могли обновить пункты меню.

В этом случае onCreateOptionsMenu вызывается каждый раз после invalidateOptionsMenu (), но когда я запускаю приложение на android 2.3, onCreateOptionsMenu вызывалось только один раз.

1 INFO / System.out (382): onCreateOptionsMenu
2 INFO / System.out (382): onPrepareOptionsMenu
3 INFO / System.out (382): onPrepareOptionsMenu
4 INFO / System.out (382): onOptionsItemSelected
5 INFO / System.out (382): buttonHandler
6 INFO / System.out (382): onCreateOptionsMenu
7 INFO / System.out (382): onPrepareOptionsMenu

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public boolean onCreateOptionsMenu(Menu menu) {
    System.out.println("onCreateOptionsMenu");
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);
    return true;
}

public boolean onPrepareOptionsMenu(Menu menu) {
    System.out.println("onPrepareOptionsMenu");
    return super.onPrepareOptionsMenu(menu);
}

public boolean onOptionsItemSelected(MenuItem item) {
    System.out.println("onOptionsItemSelected");
    return super.onOptionsItemSelected(item);
}

public void buttonHandler(View v){
    System.out.println("buttonHandler");
    invalidateOptionsMenu();
}

1 Ответ

3 голосов
/ 17 мая 2011

Это, вероятно, ошибка документации. Я ожидаю, что onCreateOptionsMenu() будет вызван после invalidateOptionsMenu().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...