2013-07-14 18 views
10

Ho un'app con due attività: MainActivity e SettingsActivity. MainActivity ha un menu con una singola voce di menu Settings. Quando si fa clic su questa voce di menu, viene avviato SettingsActivity con un intento. Dopo l'avvio dell'attività, faccio clic sul pulsante Indietro nell'angolo in alto a sinistra e non succede nulla. Presupposi da quando ho iniziato l'attività utilizzando un intento, lo stack di attività sarebbe gestito automaticamente. Voglio tornare alla MainActivity. Mi sbaglio in questa ipotesi?Pulsante Indietro Android non torna all'attività precedente

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

la prego di aggiungere il codice completo delle due attività? –

+0

Vuoi dire che fai clic sull'icona dell'app in ActionBar e non succede nulla? – patheticpat

+0

puoi aggiungere anche il manifest? è possibile aggiungere solo i tag delle attività – Nativ

risposta

34

All'interno della vostra SettingsActivity è necessario eseguire l'override onOptionsItemSelected per attivare il pulsante di nuovo in alto a sinistra della barra delle azioni per tornare indietro. Non sa da solo ciò che deve fare al clic. All'interno della custodia android.R.id.home puoi chiamare semplicemente finish(). Questo finirà la tua attività attuale e tornerai a MainActivity che lo ha avviato. Ad esempio:

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

Solo per completezza, per consentire il tasto home, è possibile aggiungere il seguente nella vostra onCreate() di SettingsActivity:

getActionBar().setDisplayHomeAsUpEnabled(true); 

Come da documenti di setDisplayHomeAsUpEnabled()

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

Spero che questo aiuti.

+0

Non vedo this.finish() in SettingsActivity onOptionsItemSelected. – nurettin

+0

Questo ha funzionato perfettamente per il mio caso in cui il pulsante su non funzionava per un'attività a cui ho navigato tramite il menu di scelta rapida. – Kat

1

Basta aggiungere queste righe nel vostro methord OnCreate

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

e sovrascrivere questo metodo per aggiungere funzionalità al pulsante indietro:

@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); 
} 

Spero che ti aiuta

Problemi correlati