OptionMenu не се появява

Уча разработка за 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 промените последния ред на

app: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
Можете да дебъгвате кода си, за да знаете дали щракването работи или не. Можете също така да зададете тост или да влезете в функцията OptionsItemSelected като тази 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 тип връщане Булев не е съвместим с 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