Ich habe eine Aktivität, die mehrere Fragmente enthalten kann. Jedes der Fragmente kann eigene Menüeinträge in der ActionBar haben. Dies funktioniert soweit und jedes Element ist anklickbar und führt die gewünschte Aktion aus.OnOptionsSetelected in Aktivität wird vor onOptionsItemSelected in Fragment aufgerufen. Andere Möglichkeit möglich?
Mein Problem ist das folgende. Im MainActivity erklärte ich die folgenden Zeilen Anrufe an die homeicon der ActionBar abfangen:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
clearBackStack();
setHomeFragment();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
ich es in der Aktivität erklärt, weil ich, dass jedes Fragment wollte dies nennen sollte, so dass ich das nicht fangen müssen android.R.id.home Fall in jedem Fragment.
In einem Fragment verwende ich setDisplayHomeAsUpEnabled (true), so dass ich den kleinen Pfeil links von der ActionBar Icon bekomme. Wenn das HomeIcon in diesem Fragment geklickt wird, möchte ich das HomeFragment nicht einstellen, sondern das Fragment, das zuletzt angezeigt wurde. So habe ich ein onOptionsItemSelected - Methode in dem Fragment:
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
setLastFragment();
return true;
...
Allerdings bedeutet dies nicht so funktionieren, ich wollte es arbeiten. Die Option onOptionsItemSelected der Aktivität wird zuerst aufgerufen, fängt das MenuItem ab und leitet zum HomeFragment um. Mit den anderen MenuItems, die in anderen Fragmenten deklariert sind, kann ich das gleiche Verhalten sehen. Aktivität wird zuerst aufgerufen, fängt das MenuItem nicht ab (Standardfall) und leitet dann zu super.onOptionsItemSelected (Element) um.
So scheint es, dass dies der Fall ist, wie Android die Menü-Klicks behandelt. Erste Aktivität, dann Fragment. Gibt es eine Möglichkeit, dies zu ändern? Ich möchte den android.R.id.home-case nicht in jedes Fragment einfügen und dort handhaben. Gibt es einen schöneren Weg, dies zu tun?
Dies ist nicht das, was MrHill verlangte! Ich stehe vor dem gleichen Problem. Normalerweise behandelt die Aktivität die Schaltfläche "Home UP". Manchmal möchten wir spezielle Aktionen ausführen, wenn die Taste "Home UP" gedrückt wird, während ein bestimmtes Fragment gerade aktiv ist. Die Rückgabe von false für die Aktivität onOptionsItemSelected verhindert, dass die Aktivität den Fall behandelt. – John