Toolbar.inflateMenu, кажется, ничего не делает

В настоящее время я возился с новой библиотекой AppCompat, перенося материальный дизайн на старые устройства.

Установка панели инструментов в качестве панели действий у меня отлично работает, но панель инструментов, похоже, ничего не делает при вызове inflateMenu(int resId). Из документов я подумал, что это замена getMenuInflater().inflate(int resId), вызываемого из onCreateOptionsMenu. Если я делаю последнее, пункты меню корректно раздуваются и добавляются на панель инструментов, но inflateMenu кажется ни к чему.

Что мне не хватает?

Код активности:

Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.inflateMenu(R.menu.main); // this does nothing at all
    setSupportActionBar(toolbar);
}

// this works
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

Заранее спасибо!


person danijoo    schedule 22.10.2014    source источник


Ответы (1)


Если вы вызываете setSupportActionBar(), вам не нужно использовать toolbar.inflateMenu(), потому что панель инструментов действует как панель действий. Все обратные вызовы, связанные с меню, выполняются по умолчанию. Единственный раз, когда вам нужно вызвать toolbar.inflateMenu(), это когда вы используете панель инструментов как отдельный виджет. В этом случае вам также придется обрабатывать события щелчка пункта меню через

toolbar.setOnMenuItemClickListener(
        new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // Handle menu item click event
                return true;
            }
});
person MrEngineer13    schedule 22.10.2014
comment
Благодарю за разъяснение. Таким образом, кажется, что inflateMenu подходит/работает только для панелей инструментов, которые не установлены как ActionBar. - person danijoo; 23.10.2014
comment
В стандартном (неавтономном виджете) я вижу, что onCreateOptionsMenu не вызывается до после onResume!!! Это нарушает мою текущую технику использования onCreateOptionsMenu для заполнения полей-членов пользовательских представлений на панели инструментов до вызова onResume. Любая идея, что происходит не так или как это сделать? - person swooby; 21.02.2015
comment
Я использую setSupportActionBar. Как мне показать элементы действий на панели инструментов, если я не раздуваю меню?? - person IgorGanapolsky; 20.05.2015
comment
Если вы действительно хотите использовать toolbar.inflateMenu(), вы можете следовать этому ответу: stackoverflow.com/a/63529156/2534007 - person Mohib Irshad; 21.08.2020