2011-10-21 16 views
28

Stworzyłem aplikację, która obsługuje wersję zarówno telefonu, jak i tabletu, więc używam biblioteki android-support-v4.jar.Nie można zastąpić onCreateOptionsMenu w ListFragment

Moja aktywność rozszerza ListFragment i starałem się zastąpić onCreateOptionsMenu (MENU, MenuInflater inflater), jak w poniższym linku: http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuSupport.html

ja wcześniej nazywana setHasOptionsMenu.

Niestety, wygląda na to, że nie mogę przesłonić onCreateOptionsMenu().

To jest komunikat o błędzie:

Sposób onCreateOptionsMenu (MENU, MenuInflater inflater) od typu MyFragment musi zastąpić lub implementuje metodę supertypem.

I zrobiłem to z:

Public class MyFragment extends ListFragment 

Odpowiedz

55

Upewnij się, że przywóz z biblioteki kompatybilności, a nie z samego SDK.

+0

pisałem moje rozwiązanie, gdy odpowiedział ;-) Masz rację, że był kwestia. Dzięki. –

+9

Jeśli przyjdziesz do tego pytania, robiąc ten sam błąd dla ActoionBarSherlock, zastosowanie ma to samo rozwiązanie. Usuń instrukcję importu menu i ponownie zaimportuj menu z ABS. Zamień getMenuInflater przez getSupportMenuInflater. – Snicolas

+1

Aby być bardziej przejrzystym: należy zastąpić metodę, która używa klas menu sherlock, zamiast sdk. Użyj również getSupportMenuInflater(), aby nadmuchać menu lib. –

6

O tak !!! To było dobre!

Zaimportowałem android.view.Menu w MyFragment zamiast android.support.v4.Menu!

Straciłem na tym kilka godzin! Mam nadzieję, że ten post może przynajmniej pomóc komuś innemu.

46

OK, po prostu miałem ten sam problem, chociaż nie zostało to naprawione przez to, co jest tutaj. Używam biblioteki ActionBarSherlock i okazuje się, że onCreateOptionsMenu chce być od android.support.v4.view.Menu i MenuInflater, aby być z android.view.MenuInflater, a nie android.support.v4.view.MenuInflater. Nie pytaj mnie dlaczego. Nie wiem, czy to rozwiąże wszystkich, więc podzielę się tym, jak to wymyśliłem:

Kliknij prawym przyciskiem myszy puste miejsce, w którym chcesz, aby metoda znajdowała się w menu Elcipse> Source> Overide/Implement method. ..

Po prostu znajdź to stąd, a Eclipse automatycznie zaimportuje poprawne rzeczy.

+17

Uwaga: Jeśli chcesz użyć inflatora, powinieneś zamienić 'getMenuInflater()' 'getSupportMenuInflater()'. – Grimmace

+0

W moim przypadku zapomniałem rozszerzyć SherlockFragment zamiast Fragment. –

+0

Należy również upewnić się, że główna działalność rozszerza system ABS w następujący sposób: "Klasa publiczna MainActivity rozszerza SherlockActivity {" – Britc

-1

użyłem i użyłem com.actionbarsherlock.view.Menu - może zmieniło się od?

26

Miałem podobny problem przy użyciu SherlockActionBar na mojej działalności. Tu był mój setup, że problem został rozwiązany:

import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 

public class LoginActivity extends SherlockActivity { 

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

... 


} 
+1

Dziękuję. 'getSupportMenuInflater()' zamiast standardowego 'getMenuInflater()' jest decyzją. –

16

miał ten sam problem, ale to dlatego, że wykorzystane w niewłaściwy sposób onCreateOptionsMenu w moim Fragment!

boolean onCreateOptionsMenu(Menu menu) dotyczy tylko działań.

@Override //For Activities 
public boolean onCreateOptionsMenu(Menu menu) { 
... 

Musiał przenieść go do klasy aktywności zawierającej Fragment.

Fragment mają własne: void onCreateOptionsMenu (Menu menu, MenuInflater inflater)

@Override //For Fragments. 
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){ 
... 

Tworzenie menu opcji: http://developer.android.com/guide/topics/ui/menus.html

1
@Override 
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 
    // TODO Auto-generated method stub 
    getSupportMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
2

spróbować tego, faktycznie IDE irytować bw natywnego importu menu i Sherlocka import..so gdybyśmy określ go wyraźnie, a następnie zostanie rozwiązany ..

@Override 
    public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu, 
      com.actionbarsherlock.view.MenuInflater inflater) { 

} 

@Override 
    public boolean onOptionsItemSelected(
      com.actionbarsherlock.view.MenuItem item) { 
     // TODO Auto-generated method stub 

} 
0

Wystąpił ten sam problem w działaniu na Xamarin. oczekiwano, że metoda zastosuje Xamarin.ActionbarSherlockBinding.Views.IMenu jako argument.

Jak się dowiedzieć: -Komentuj metodę OnCreateOptionsMenu Zacząłeś implementować. -W niektórych metodach pracy zacznij pisać OnCreateOptionsMenu jak chcesz to nazwać. - Wybierz go z listy sugestii. - Ustaw kursor na wywołaniu OnCreateOptionsMenu. -press Command + d, aby przejść do przeglądarki zespołu. Interfejs zobaczysz z wdrożenia. -Po naciśnięciu wskaźnika myszy na typie parametru, który zajmuje Przejdziesz do interfejsu tego typu implementacji. -I zobaczysz przestrzeń nazw, w której się znajduje.

0

Miałem ten sam problem i to, co zrobiłem, aby użyć naCreateOptionsMenu Fragmentu. Zastąp metodę onCreate fragmentu i upewnij się, że używasz metody setHasOptionsMenu z wartością parametru "true", aby system wiedział, że Fragment będzie używał menu Options.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

następnie zastąpić onCreateOptionsMenu nadmuchać menu plik xml (tutaj w tym przykładzie zawyżone fragmentmenu.xml

@Override 
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.fragmentmenu, menu); 
} 
Powiązane problemy