onCreateOptionsMenu никогда не вызывается

у меня возникли проблемы с получением меню опций, работающего в Android. Раньше я создавал приложения, и все они работали нормально, но теперь меню просто не появляется.

код:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    getMenuInflater().inflate(R.menu.activity_video, menu);
    return true;
}

весь метод никогда даже не вызывается (проверяется установкой точки останова). Активность супер-проста, она просто имеет VideoView В С OnTouchListener set.

Я использую Android 4.0.4 на Samsung Galaxy 10.1, уровень API 15, minSDK 15. Я скучаю? что-то?

9 ответов


Если телефон, который вы тестируете, имеет кнопку меню onCreateOptionsMenu, не будет вызываться при запуске с темой:

android:theme="@android:style/Theme.Black.NoTitleBar"

но когда вы нажимаете кнопку меню onCreateOptionsMenu будет называться. Я не знаю, что происходит на телефонах без аппаратных кнопок...


в последних версиях Android при использовании библиотеки compat для toolbar, очень часто, что это происходит, для того, чтобы получить пункты меню для отображения на панели инструментов вы должны сделать следующее:

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

вызов с onCreate первый. The onCreateOptionsMenu будет вызываться автоматически.


в методе: Fragment#onCreateView(...) вы должны поставить:

setHasOptionsMenu(true);

тогда будет вызван ваш метод.


у меня была такая же проблема (меню не появляется, onCreateOptionsMenu не называют).

если вы вызываете это внутри фрагмента, вам нужно переопределить public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) не public boolean onCreateOptionsMenu(Menu menu). Fragments не используйте последний, поэтому они никогда даже не назовут его.

меню деятельности

меню фрагмент


У меня была та же проблема. Моя проблема была решена путем наследования другого класса activity.

Так я и делал:

public class WelcomeActivity расширяет активность

но изменил его на:

public class WelcomeActivity расширяет AppCompatActivity

таким образом, я говорил, что, скажем, панель действий может быть добавлена к вашей деятельности.


возможно, вы также переехали метода OnKeyDown метод и сделал его всегда возвращать true. Возврат true означает, что keyEvent будет предотвращен от дальнейшего распространения. См. код ниже:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        /*
          handling event
         */
        return true; //onCreateOptionsMenu won't be invoked.
}

У меня была аналогичная проблема, но другое решение, которым я делюсь с сообществом (так как мне потребовался один час, чтобы понять, что происходит):

    abstract class BaseActivity : AppCompatActivity{
      override fun onCreate(savedInstanceState: Bundle?) {
      setSupportActionBar(my_toolbar)
      }
    }
    class MyActivity : BaseActivity{
        // TODO : some good stuff
    }

где my_toolbar-это объект, созданный в моем xml-файле с помощью привязки данных.

проблема выглядит одинаково, нет панели инструментов, нет вызова onCreateOptionsMenu.

мое решение состояло в том, чтобы продвинуть этот код в дочерний класс, а не в этот базовый, поскольку my_toolbar инициализируется только как дочерний класс построенный.


попробуйте это работает для меня: - - -

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.home_page_menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.menu_delete:
        Toast.makeText(this, "You pressed the Delete!",
                 Toast.LENGTH_LONG).show();
        break;


      case R.id.menu_setting:
     Intent intent=new Intent(HomePage.this,Setting.class);
     startActivity(intent);
     finish();
     Toast.makeText(this, "You pressed the Setting!",
     Toast.LENGTH_LONG).show(); break;


    }

    return super.onOptionsItemSelected(item);
}