2013-07-14 12 views
10

Mam aplikację, która ma dwie aktywności: Główna Aktywność i UstawieniaAktywność. MainActivity ma menu z pojedynczym elementem menu Ustawienia. Po kliknięciu tego elementu menu uruchamia program SettingsActivity z zamiarem. Po uruchomieniu działania klikam przycisk Wstecz w lewym górnym rogu i nic się nie dzieje. Zakładałem, że odkąd rozpocząłem działanie z użyciem intencji, stos działań będzie zarządzany automatycznie. Chcę wrócić do MainActivity. Czy myliłem się w tym założeniu?Przycisk Wstecz Androida nie powraca do poprzedniej aktywności

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

mógłbyś dodać pełny kod dwóch działań? –

+0

Masz na myśli kliknięcie ikony aplikacji w pasku akcji i nic się nie dzieje? – patheticpat

+0

czy możesz również dodać manifest? możesz dodać tylko znaczniki aktywności – Nativ

Odpowiedz

34

wewnątrz SettingsActivity trzeba zastąpić onOptionsItemSelected, aby włączyć przycisk wstecz na lewym górnym rogu na pasku działań wracając. Sam nie wie, co należy zrobić z kliknięciem. Wewnątrz obudowy android.R.id.home można po prostu zadzwonić pod numer finish(). Spowoduje to zakończenie bieżącej aktywności i nastąpi powrót do wersji MainActivity, która ją uruchomiła. Np:

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

Tylko dla kompletności, aby włączyć przycisk home, można dodać następujące w swojej onCreate() od SettingsActivity:

getActionBar().setDisplayHomeAsUpEnabled(true); 

Zgodnie docs setDisplayHomeAsUpEnabled()

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

Mam nadzieję, że to pomoże.

+0

Nie widzę this.finish() w ustawieniach OnOptionsItemSelected SettingsActivity. – nurettin

+0

To zadziałało idealnie w moim przypadku, gdy przycisk w górę nie działał dla aktywności, do której nawigowałem za pośrednictwem menu kontekstowego. – Kat

1

Wystarczy dodać te linie w swoim OnCreate methord

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

i zastąpić tę metodę, aby dodać funkcjonalność przycisku Wstecz:

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

nadzieję, że pomoże Ci

Powiązane problemy