Android: Wie in jeder (List) Aktivität ein gemeinsames Menü haben, ohne die überschriebenen Methoden neu zu schreiben?

StackOverflow https://stackoverflow.com/questions/2006457

Frage

Ich weiß, dass Android einige nützliche Methoden bietet, um ein Menü zu definieren überschrieben werden:

    @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
                // ...
  return true;
 }

 public boolean onOptionsItemSelected(MenuItem item) {
  Intent i;
     switch (item.getItemId()) {
     case AIS: i = new Intent(this, ActivityInventorySheet.class);
      startActivity(i);
               return true;
     // ...
     }
     return false;
 }

Ich mag dieses Menü von jeder Aktivität und ListActivity meine Android-Anwendung gemeinsam genutzt haben. Dies ist für ein Standard-Menü mit jeweils (List) Aktivität, die mit einem Klick den Benutzer Sprung zu jedem Teil der Anwendung kann.

Im Moment ist der einfachste Weg, dies zu erreichen, ist zu kopieren und einfügen, beid Methoden in jeder (List) Aktivität der Anwendung. Ich weiß nicht, wie diese Redundanz Code geschrieben:)

Sub-Klassierung eine vernünftige Wahl? Ich habe bereits, dass die Sub-Klassierung eines meines ListActivity funktioniert nicht sehr gut zu sehen (Threads, die Objekte aus einer Datenbank abrufen Probleme geben). Gibt es andere Möglichkeiten, um ein Menü obwohl Aktivitäten?

teilen

Danke

War es hilfreich?

Lösung

Ich sehe keinen Grund, dies wäre nicht perfekt funktionieren:

public abstract class MyListActivity extends ListActivity
{
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
      // ...
      return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      Intent i;
      switch (item.getItemId()) {
          case AIS: i = new Intent(this, ActivityInventorySheet.class);
          startActivity(i);
          return true;
          // ...
      }
      return false;
   }    
}

Dann müssen nur Ihre Aktivitäten MyListActivity statt ListActivity verlängern.

  

Ich habe bereits entschieden, dass Unter classing gesehen   einer meiner ListActivity funktioniert nicht   sehr gut (Fäden, die abgerufen   Objekte aus einer Datenbank geben   Probleme).

Das klingt wie ein ganz anderes Problem. Sie könnten eine eigene Frage in Bezug auf diese stellen. Einfach erstreckt wie die Probleme nicht erstellen Sie eine Klasse in Java sollten Sie beschreiben.

Andere Tipps

Ich verwende eine Hilfsklasse mit statischen Methoden gemeinsame Menüoptionen zu initialisieren und zu handhaben, dann wird jede Aktivität definiert ihre eigene onCreateOptionsMenu etc., die Delegierten gemeinsame Aufgaben, die die Hilfsklasse, und diese Tätigkeit bestimmte Elemente weitere Menü hinzufügen kann.

So etwas wie

class SharedMenu {
    public static void onCreateOptionsMenu(Menu menu) {
        menu.add(...);
        menu.add(...);
    }
}

public class MyActivity extends Activity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(...);  // specific to this activity
        SharedMenu.onCreateOptionsMenu(menu);
        return true;
    }

}

mit mehr Methoden für onMenuItemSelected etc.

Edit: Ich bin nicht eine gemeinsame Basisklasse verwenden, weil ich zwei von ihnen brauchen würde, um mit zu beginnen, eine für Aktivitäten und eine weitere für die Liste Aktivitäten und dann in meinem Fall muss ich benutzerdefinierte Menüoptionen auf einige hinzufügen Aktivitäten.

Ich habe soeben eine Funktion GreenDroid dass zu verwalten. Kann sehr nützlich sein, check it out. Ich werde versuchen, später ein Beispiel zu stellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top