2012-04-26 11 views
12

Dodaję elementy menu fragment Używanie onCreateOptionsMenu powodzeniem ...Elementy menu fragmentu programu ActionBar. Umieszczając je przed

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.additional_fragment_menu, menu); 
} 

powyżej To dodatkowe menu obejmuje 1 pozycję menu. Muszę umieścić ten element menu przed wszystkimi pozostałymi istniejącymi przedmiotami, aby pojawił się najpierw na pasku akcji. Obecnie wydaje się ostatni.

(To jest android: showAsAction = "always" poz Dodaję)

Próbowałem dodanie go programowo, ale nie ma opcji w obiekcie MENUITEM co pozwala określić ikonę i showAsAction flagi.

Ktoś ma jakieś pomysły?

Odpowiedz

21

Ok mam pęknięty to sobie ze wskaźnikiem we właściwym kierunku od EvilDuck. I tak dymmeh masz rację, możesz to zrobić programowo !!

To, czego potrzebowałem, to połączenie orderInCategory i menuCategory. Android zdaje się ignorować orderInCategory, jeśli nie masz określonego menuCategory.

  • I określono kategorię każdego elementu pojedynczego menu w mojej aplikacji poprzez ustawienie wartości atrybutu menuCategory do "system".
  • Kim pozycji menu podstawy (te, które są ładowane przez Activity) miałem ustawienie dużej liczby orderInCategory, takie jak 10, 11, 12, 13 itd.
  • Kiedy następnie napełniany i dodano dodatkowe menu fragment xml z tą samą kategorią i wartością orderInCategory pojawił się jako pierwszy element.
+0

Użyłem dla _back_ elementów menu, które są zawyżone przez samą czynność kategorii ** 'secondary' ** i bez kategorii dla elementów _front_ moich fragmentów. Działa (testowany z emulatorami od 2.3.7 - 4.4). Zamówienie w kategorii nieruchomość nieużywana. – WebDucer

4

Spróbuj użyć „Android: orderInCategory” atrybut pozycji menu

+0

Próbowałem tego, niestety, nie miało to żadnego znaczenia. –

+0

Dziwne ... to pomogło mi zmienić kolejność przedmiotów w ActionBar – EvilDuck

+0

Zobacz moją odpowiedź (poniżej/powyżej). Dzięki za pomoc. –

4

nie jestem pewien, gdzie dostajesz, że nie można ustawić opcję showAsAction lub ikonę programowo ex:

public void onCreateOptionsMenu(Menu menu) 
{ 
    menu.add(Menu.NONE, /** group ID.. not really needed unless you're working with groups **/ 
       0,   /** this is the items ID (get this in onOptionsItemSelected to determine what was clicked) **/ 
       Menu.NONE, /** ORDER.. this is what you want to change **/ 
       "Cancel") /** title **/ 
       .setIcon(R.drawable.ic_menu_cancel) 
       .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
} 

Docs:

menu.add(int groupId, int itemId, int order, CharSequence title)

setShowAsAction(int actionEnum)

setIcon(int resId)

+0

zdajesz sobie sprawę, że zależy to od docelowej wersji API, prawda? – EvilDuck

+0

Tak. Używa fragmentów + pasek akcji, co oznacza, że ​​używa API 11+ lub biblioteki kompatybilności dla API 4+. Oba mają opisane przeze mnie metody. – dymmeh

+0

Wystarczająco fair, chociaż biblioteka Compat ma różne metody klasy narzędziowej do ustawiania showAsAction w elementach menu. – EvilDuck

0

Wszystko jest poprawne, po prostu użyj poniżej jednego kodu linii w onCreateView.

setHasOptionsMenu(true); 
Powiązane problemy