Меню опций не появляется

Я изучаю Android-разработку. До сих пор я создал базовое приложение и хотел бы отобразить OptionMenu. Я следовал учебнику. Меню не отображается на моем телефоне. Может я что-то забыл?

Я просмотрел этот пост: меню параметров не отображается в Android но похоже, что моя проблема в другом.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_refresh) {
        FetchWeatherTask weatherTask = new FetchWeatherTask();
        weatherTask.execute();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.forecastfragment, menu);
}

Вот код меню

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_refresh"
        android:title="@string/action_refresh"
        app:showAsAction="never" />
</menu>

Я провел часы. Переписывал код с нуля 2 раза, но проблема осталась. Все работает хорошо, только меню не появляется. В чем проблема?


person anothertest    schedule 13.12.2014    source источник


Ответы (2)


в вашем меню xml измените последнюю строку на

приложение: showAsAction = "ifRoom"

person Vigen    schedule 13.12.2014
comment
если ваш класс расширяет фрагмент, вы переопределяете правильные функции - person Vigen; 13.12.2014
comment
Хорошо, теперь он появляется. Почему раньше не появлялся? Я также попытался изменить его на всегда. Почему он появляется на некоторых устройствах без ifRoom? - person anothertest; 13.12.2014
comment
Извините, я не понимаю вопроса, но вы можете узнать больше о панели действий в документации по Android developer.android.com/guide/topics/ui/actionbar.html - person Vigen; 14.12.2014
comment
Спасибо @Vigen, я начинаю читать это сейчас. У меня есть к вам последний вопрос. Когда я нажимаю кнопку, это должно привести к сбою приложения из-за исключения безопасности, но это не так. Должен ли я сделать вывод, что нажатие на кнопку ничего не делает в моем случае? - person anothertest; 14.12.2014
comment
Вы можете отладить свой код, чтобы узнать, работает ли клик или нет. Вы также можете установить всплывающее окно или войти в функцию onOptionsItemSelected, например, Toast.makeText(getActivity(), click, 1000).show(); - person Vigen; 14.12.2014

И измените app:showAsAction = never на app:showAsAction = ifRoom|withText, добавьте withText, чтобы пользователи могли долго нажимать на элементы и отображать назначение элементов, а также, если ваши элементы помещены в переполнение, вместо этого будет отображаться текст.

person Biu    schedule 13.12.2014
comment
Ошибка: (30, 20) ошибка: onCreate(Bundle) в ForecastFragment не может переопределить onCreate(Bundle) в возвращаемом типе Fragment Boolean несовместим с void, это сообщение, которое я получаю. - person anothertest; 13.12.2014
comment
Смотрите мой обновленный ответ, чтобы вызвать инфлятор меню getMenuInflater() класса Activity - person Biu; 13.12.2014
comment
Код OP находится во фрагменте. Метод onCreateOptionsMenu(), о котором вы говорите, является членом класса Activity. - person Mike M.; 13.12.2014
comment
мой плохой, он не указал это в своем вопросе, хотя - person Biu; 13.12.2014
comment
Я не понимал, что важно, чтобы мой класс расширял фрагменты. - person anothertest; 13.12.2014