Miałem problem z ustawianiem niektórych elementów menu fragmentów w ActionBar
i znalazłem sposób na jego rozwiązanie, ale nie rozumiem, dlaczego zadziałało.Używanie onPrepareOptionsMenu zamiast onCreateOptionsMenu w Fragment
Chciałem zmienić widoczność w elemencie menu zaraz po tym, jak nadmuchałem go z pliku menu xml w metodzie onCreateOptionsMenu
. Kod wydaje się działać dobrze, ale nie ma widocznego efektu. Rozwiązałem problem zawyżając menu w metodzie onCreateOptionsMenu
, ale zmieniając jego widoczność w metodzie onPrepareOptionsMenu
.
Co chcę wiedzieć, dlaczego zmiana widoczności w onCreateOptionsMenu
nie działa.
Co mogę zrobić w onPrepareOptionsMenu
, którego nie mogę wykonać w onCreateOptionsMenu
?
Czy istnieje wzór do naśladowania tutaj?
Dzięki!
Oto odpowiedni kod, na wszelki wypadek:
public class MyFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
// This does not work, compiles and runs fine, but has no visible effect
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// This does work
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
}
Nie jestem pewien, ale [dokumentacja] (http://developer.android.com/reference/android/app/Activity. html # onCreateOptionsMenu (android.view.Menu)) mówi: "_ ... Aby zaktualizować menu za każdym razem, gdy jest wyświetlane, zobacz [onPrepareOptions Menu (Menu)] (http://developer.android.com/reference/android/app/ Activity.html # onPrepareOptionsMenu (android.view.Menu)) ._ " –
Dzięki za komentarz! Chodzi o to, że nie muszę "aktualizować go za każdym razem, gdy jest wyświetlany" (jest wyświetlany cały czas, nie ma podmenu), chcę tylko skonfigurować menu tylko raz, po utworzeniu/nadmuchaniu i to wszystko . W porządku, może się wydawać, że to samo w mojej sytuacji, ale punktem mojego pytania jest zrozumienie, dlaczego tak działa. Dlaczego muszę "zmieniać konfigurację" menu za każdym razem, gdy jest ono wyświetlane, kiedy mogę to zrobić tylko raz, gdy go utworzę? –
Rozumiem i zgadzam się, że powinna to być opcja. Moim zdaniem, myślę, że tak działa system Android. W niektórych przypadkach możesz kodować właściwości menu za pomocą atrybutów xml. –