3

Я пытаюсь добавить кнопки ActionBar в FragmentActivity, и я не могу понять, что я делаю неправильно. При запуске приложения все, что я вижу, это кнопка меню по умолчанию на ActionBar и не моя кнопка ..FragmentActivity Action Bar Options Меню

FragmentActivity:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.animalsmenu,menu); 
    return true; 
} 

XML-файл:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/dogs" 
    android:title="Dogs" 
    android:orderInCategory="1" 
    app:showAsAction="always"> 
</item> 

+0

Взгляните на мой ответ здесь: http://stackoverflow.com/questions/25700575/acessing-the-options-menu-from-a-fragment-android/25700901#25700901 – XDnl

+0

@ XDnl: Вопрос (согласно к OP) показывает код из 'FragmentActivity', а не' Fragment'. – Squonk

ответ

5

Класс FragmentActivity распространяется от класса Activity. Документация по методу ActivityonCreateOptionsMenu(Menu menu) заявляет следующее ...

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

Другими словами, изменить код, чтобы ...

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

Это надуть пункт меню в Menu передаваемым в вашем переопределенный метод, а затем вы передаете его родителю (super) версия метода.

+0

Спасибо за ваш ответ, но его все еще не работает .. – james

+0

@james: вы напрямую расширяете 'FragmentActivity' или у вас есть собственный базовый класс, который расширяет' FragmentActivity', а затем вы расширяете это? – Squonk

+0

Я непосредственно расширяю FragmentActivity – james

2

От Fragment Documents

public void setHasOptionsMenu (boolean hasMenu) Сообщайте, что этот фрагмент хотел бы участвовать в заполнении меню опций, получив вызов onCreateOptionsMenu (Menu, MenuInflater) и связанные с ним методы.

Следовательно, вы должны позвонить setHasOptionsMenu(true) в свой onCreate().

Или для обратной совместимости, лучше поместить этот призыв как можно позже в конце onCreate() или даже позже в onActivityCreated() .Try, используя это в любом onCreate() или onActivityCreated().

Надеюсь, это поможет.

+3

Я не могу использовать setHasOptionsMenu (true) внутри my onCreate() любые идеи, почему? возможно, потому что это FragmentActivity, а не обычный фрагмент? – james

13

Сделайте MainActivity удлинителем ActionBarActivity вместо FragmentActivity.

ActionBarActivity сам распространяет FragmentActivity, поэтому все должно быть в порядке.