2016-07-06 30 views
0

Anfänger versucht, sein Menü zu organisieren ... Aber ich habe ein Problem, "Zurück" -Option in meinen Untermenüs zu implementieren. Ich erwarte, dass es den Benutzer automatisch zum Hauptmenü führt. Aber ich konnte keine Lösung finden. Hatte jemand schon einmal die gleiche Herausforderung?Android-Untermenü: Zurück zum vorherigen Untermenü (oder zum Hauptmenü vom Untermenü)

ich xml für meine Kontextmenü:

<item 
    android:icon="@android:drawable/ic_menu_sort_by_size" 
    android:title="Menu" 
    android:id="@+id/main_main_menu" 
    app:showAsAction="always"> 

    <menu> 
     <item 
      android:id="@+id/goto_main_menu" 
      android:orderInCategory="1" 
      android:title="@string/action_goto" 
      android:icon="@android:drawable/ic_menu_directions"> 
      <menu> 
       <item 
        android:orderInCategory="1" 
        android:title="New measurment" 
        android:icon="@android:drawable/ic_menu_add"/> 
       <item 
        android:orderInCategory="2" 
        android:title="Archive" 
        android:icon="@android:drawable/ic_menu_agenda"/> 
       <item 
        android:id="@+id/back_main_menu" 
        android:orderInCategory="3" 
        android:title="Back" 
        android:icon="@android:drawable/ic_menu_revert"/> 
      </menu> 
     </item> 

     <item 
      android:orderInCategory="4" 
      android:id="@+id/logout" 
      android:title="@string/action_logout" 
      android:icon="@android:drawable/ic_menu_set_as"/> 
    </menu> 
</item> 

Ich verwende folgenden Code mein Menü anzuzeigen:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

Option, klicken Sie einfach folgenden Code verwaltet wird:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (id == R.id.back_main_menu) { 
     Toast.makeText(MainActivity.this, "Let's go back...", Toast.LENGTH_LONG).show(); 
       return true; 
     } 

    if (id == R.id.logout) { 
     Intent intent = new Intent(this, MainActivity.class); 
     startActivity(intent); 

    } 
    return super.onOptionsItemSelected(item); 
} 

Wha t sollte ich meinen Code hinzufügen, um nach dem Klicken auf "Zurück" zum Hauptmenü zurückzukehren?

Antwort

0

Versuchen Sie, die onBackPressed() Superklasse Ihrer Tätigkeit wie

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
if (id == R.id.back_main_menu) { 
     super.onBackPressed(); 
     return true; 
    } 
    // ... 
return super.onOptionsItemSelected(item); 
} 

Verwendung Wenn das Sie mir mehr Informationen geben müssen nicht funktioniert. Wenn Sie mehrere Aktivitäten verwenden, können Sie rufen Sie einfach die finish() Methode wie folgt:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
if (id == R.id.back_main_menu) { 
     this.finish() 
     return true; 
    } 
    // ... 
return super.onOptionsItemSelected(item); 
} 

finish() die tatsächliche betrachtet Aktivität schließen und an die letzte bekannte/betrachtet Aktivität navigieren.

EDIT1 Wenn Sie nur eine Aktivität haben, verwenden Sie Fragmente dynamisch Blick in Ihre Aktivität aufzublasen. Schauen Sie sich dieses Beispiel von der Entwicklerseite: https://developer.android.com/training/basics/fragments/fragment-ui.html

EDIT2 Wenn Sie Sie erscheinen verschiedene Menüpunkte wollen, dann onPrepareOptionsMenu() verwenden. Jedesmal, wenn man ein neues Menü möchten, rufen Sie invalidateOptionsMenu wie folgt aus:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
if (id == R.id.back_main_menu) { 
     invalidateOptionsMenu(); 
     return true; 
    } 
    // ... 
return super.onOptionsItemSelected(item); 
} 

Des Weiteren müssen Sie definieren/überschreiben die onPrepareOptionsMenu Methode in Ihrer Aktivität:

public void onPrepareOptionsMenu(Menu menu) 
{ 
    if(mainMenuDisplay) // If main menu shall be displayed 
    { 
     // Use the id's of your menu entries to enable or disable their visibility 
     menu.findItem(R.id.main_menu_entry1).setVisible(true); 
     menu.findItem(R.id.other_menu_entry1).setVisible(false); 
    } 
    return true; 
} 
+0

Ich habe eigentlich auf die Moment nur eine Aktivität, also finish() oder onBackspressed() sind schlechte Ideen, sie "schließen" einfach meine App. Ich habe mich gefragt, ob es eine Möglichkeit gibt, innerhalb eines Kontextmenüs, das in derselben Aktivität bleibt, hin und her zu "reisen". – Jarmo

+0

verwenden Sie Fragmente? Wie navigierst du im Moment? Vielleicht könntest du einen Screenshot liefern;) –

+0

Ich habe meine Antwort bearbeitet. Ich stelle mir vor, ** Fragmente ** sind genau das, was du brauchst. Es ist der beste Weg, um neue Layouts in eine Aktivität zu inflationieren, was im Grunde "Navigieren" bedeutet. Ich habe einen Link oben hinzugefügt, ich habe dieses Beispiel auch für meine Projekte verwendet. Lassen Sie mich wissen, ob dies für Sie nützlich war :) –