2012-04-10 5 views
3

Ich habe zwei Fragmente, eine ListView und eine "Details" anzeigen. Jedes Fragment hat seine eigenen Menüoptionen. Im Landscape-Modus, in dem beide Fragmente angezeigt werden, wird jedes Menü zu einem zusammengeführt (was, wie ich annehme, von Entwurf ist), aber wenn ich das Gerät in Hochformat rotiere, bleiben die Menüs zusammengeführt und Optionen, die nicht angezeigt werden sollen da sein. Ich bin mir nicht sicher, ob ich einen Code in meine Frage einfügen muss.Umgang mit Fragment Menüs Optionen

Edit:

diesen question gefunden, aber das Hinzufügen menu.clear() zeigt nur die Menüoptionen für die Details zu sehen, wenn in der Landschaft und zurück zum Portrait ändert, wird das Menü nicht ändert.

Ich denke, die größere Frage ist, wie Sie mit Fragmenten umgehen, jedes mit den eigenen Menüoptionen.

Update:

klar sein, die Menüs funktionieren, wenn das Gerät im Hoch- oder Quermodus befindet. Das Problem tritt auf, wenn Sie von Querformat zu Hochformat oder umgekehrt drehen. Die Menüs scheinen nicht zurückgesetzt zu werden, obwohl onCreateOptionsMenu aufgerufen wird.

Antwort

1

Dieses Problem festgestellt, wenn Sie setRetainInstance(true) verwenden, dann werden die Menüs nicht aktualisiert. Leider werden durch das Entfernen dieses Umbruchs andere Dinge wie meine AsyncTask beim Ändern der Ausrichtung gelöscht.

0

Da Sie versuchen, die Orientierungsänderung jedes Mal die aufgeblasenen Menüs auf die Aktionsleiste aktualisieren Sie Ihre Aktivität im Manifest zu erklären, dass die Fragmente halten

dann in Konfigurationsänderung onConfigurationChanged die Methode überschreiben, um zu hören, und die Verwendung die invalidateOptionMenu API siehe diesen Link:

Aktivität ungültig Optionen-Menü:

http://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu%28%29

Wenn dies Ihnen hilft, markieren Sie diesen Beitrag als Antwort.

Danke.

2

Ich bin neu hier so entschuldigt, wenn ich nicht alles in erstklassigem Format. Ich hatte auch ähnliche Fragen bezüglich Menübeiträge und s. Hier ist, was ich in meiner Instanz getan habe ...

Ich habe eine FragmentActivity hosting eine ListFragment und eine zusätzliche Fragment enthält Details des Listenelements ausgewählt-ziemlich typische Tablet-Konfiguration. Dieses zusätzliche Detail Fragment wird erst hinzugefügt, wenn ein Listenelement ausgewählt wird ... Wenn ich ein Listenelement auswähle, möchte ich verhindern, dass die ListFragment s Menüelemente zum Hosting der FragmentActivity Aktionsleiste beitragen. (Aus einer UI-Perspektive ist der Hauptfokus der Benutzer das neu hinzugefügte Fragment. Um zum vorherigen Zustand zurückzukehren, wird das ausgewählte Objekt abgewählt.) Da die ListFragment nicht über das andere Fragment Bescheid wissen sollte, um die Wiederverwendbarkeit zu gewährleisten, habe ich die onPrepareOptionsMenu(..) genutzt Methode auf der Ebene FragmentActivity war der richtige Weg für mich.

Fügen Sie dieses Codeschnipsel zum Hosting FragmentActivity hinzu, um schnell das von Ihnen gewünschte Verhalten zu erhalten.

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    // 'Find' the menu items that should not be displayed - each Fragment's menu has been contributed at this point. 
    menu.findItem(id.sync).setVisible(false); 
} 
return super.onPrepareOptionsMenu(menu); 
} 

Diese Methode bedeutet, dass Ihre Fragmente wiederverwendbar bleiben, aber Ihr Gastgeber FragmentActivity können manipulieren, um die Aktivität UI (sie sind immer noch wie ursprünglich entworfen beitragen), die eine davon ist Rollen autorisiert ist.

Ich hoffe, dass hilft.