2013-07-14 8 views
10

Ich habe eine App mit zwei Aktivitäten: MainActivity und SettingsActivity. Die MainActivity verfügt über ein Menü mit einem einzelnen Einstellungsmenüpunkt. Wenn auf diesen Menüeintrag geklickt wird, wird die SettingsActivity mit einer Absicht gestartet. Nachdem die Aktivität gestartet wurde, klicke ich auf die Zurück-Schaltfläche in der oberen linken Ecke und es passiert nichts. Ich gehe davon aus, dass der Aktivitätsstapel automatisch verwaltet wird, seit ich die Aktivität mit einer Absicht gestartet habe. Ich möchte zur MainActivity zurückkehren. Liege ich falsch in dieser Annahme?Android-Zurück-Schaltfläche kehrt nicht zur vorherigen Aktivität zurück

MainActivity.onMenuItemSelected

public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    int itemID = item.getItemId(); 

    if(itemID == R.id.settings) { 
     Intent intent = new Intent(this, SettingsActivity.class); 
     startActivity(intent); 
    } 

    return true; 
} 

SettingsActivity

public class SettingsActivity extends PreferenceActivity { 

    public static final String TEST = "test"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 
+0

könnten Sie bitte hinzufügen vollständiger Code der beiden Aktivitäten? –

+0

Sie meinen, Sie klicken auf das App-Symbol in der ActionBar und nichts passiert? – patheticpat

+0

können Sie bitte auch das Manifest hinzufügen? Sie können nur die Tags der Aktivitäten hinzufügen – Nativ

Antwort

34

In Ihrem SettingsActivity Sie müssen onOptionsItemSelected außer Kraft zu setzen für den Gang zurück, um die Zurück-Taste oben links Aktionsleiste zu ermöglichen. Es weiß nicht selbst, was es beim Klick tun muss. Innerhalb des Gehäuses android.R.id.home können Sie einfach finish() anrufen. Damit beenden Sie Ihre aktuelle Aktivität und Sie kehren zu MainActivity zurück, mit dem Sie begonnen haben. ZB:

getActionBar().setDisplayHomeAsUpEnabled(true); 

Per docs von setDisplayHomeAsUpEnabled()

It is to show the user that selecting home will return one level up rather than to the top level of the app.

:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      this.finish(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

Nur der Vollständigkeit halber, die Home-Taste zu aktivieren, können Sie die folgenden in Ihrem onCreate() von SettingsActivity hinzufügen

Hoffe, das hilft.

+0

Ich sehe this.finish() in SettingsActivity onOptionsItemSelected. – nurettin

+0

Dies funktionierte perfekt für meinen Fall, in dem die Hoch-Taste nicht für eine Aktivität funktionierte, zu der ich über das Kontextmenü navigierte. – Kat

1

Fügen Sie einfach diese Zeilen in Ihrem OnCreate methord

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 

und diese Methode überschreiben Funktionalität, um Ihre Back-Button hinzuzufügen:

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } else if(id==android.R.id.home) 
    { 
    finish(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

Hoffe, es hilft Ihnen