2010-12-30 3 views
1

Beim Erweitern einer Android-Beispielaktivität, die einige andere Aktivitäten aus seinem Menü auslöst, habe ich einige Menüelemente innerhalb onOptionsItemSelected behandelt, und einige Menüelemente (die gerade Intents ausgelöst) behandelt durch Anruf setIntent innerhalb onCreateOptionsMenu.Das Mischen von menuItem.setIntent mit onOptionsAtemSelected funktioniert nicht

Im Grunde so etwas wie:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    super.onCreateOptionsMenu(menu); 

    menu.add(0, MENU_ID_1, Menu.NONE, R.string.menu_text_1); 
    menu.add(0, MENU_ID_2, Menu.NONE, R.string.menu_text_2); 

    menu.add(0, MENU_ID_3, Menu.NONE, R.string.menu_text_3). 
     setIntent(new Intent(this, MyActivity_3.class)); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    super.onOptionsItemSelected(item); 

    switch (item.getItemId()) 
    { 
     case (MENU_ID_1): 
      // Process menu command 1 ... 
      return true; 

     case (MENU_ID_2): 
      // Process menu command 2 ... 
      // E.g. also fire Intent for MyActivity_2 
      return true; 

     default: 
      return false; 
    } 
} 

Offenbar in dieser Situation das Intent-Set auf MENU_ID_3 nie gefeuert, oder jedenfalls die damit verbundene Aktivität wird nie gestartet.

Android javadoc an einem gewissen Punkt geht wie < < [wenn Sie eine Absicht auf einem Menüpunkt gesetzt] und nichts anderes behandeln das Element, dann wird das Standardverhalten sein [die Aktivität mit der Absicht starten] >> .

Was bedeutet es eigentlich "und nichts anderes behandelt den Gegenstand"? Ist es genug, um falsch von onOptionsItemSelected zurückzugeben? Ich habe auch versucht, nicht super.onOptionsItemSelected(item) am Anfang aufrufen und nur im Standard-Schalter Fall aufrufen, aber ich hatte die gleichen Ergebnisse.

Hat jemand einen Vorschlag? Ermöglicht Android, die beiden Arten der Handhabung zu mischen?

Danke für Ihre Zeit alle.

Antwort

1

Ok. Die Lösung war dumm genug. Der Name der Zielaktivität (z. B. MyActivity_3 im Beispiel) wurde im Manifest verfälscht.

Ich habe die dritte Menüelementhandhabung in onOptionsItemSelected der klassischen Schalterlogik geändert, und ich habe eine ActivityNotFoundException Ausnahme in Eclipse Debugger.

Durch die Behandlung des Menüpunktes im "setIntent-Weg" wurde keine Ausnahme ausgelöst. Obwohl, wenn ich den LogCat ansehe, könnte ich einen MenuItemImpl entdeckt haben: Can't find activity to handle intent; ignoring.