2013-07-14 4 views
7

ImagePrzycisk "Wstecz" na pasku akcji - Android. Jak przejść "z powrotem"?

! Action Bar

mówię o (numer 1, w pic), przycisk z małą strzałką i ikony aplikacji i lewym górnym rogu ekranu. Jest on definiowany automatycznie po wybraniu szablonu "Czarna aktywność".

Moja aplikacja ma bardzo duży wykres hierarchii, teraz ma około 25 działań. Po prostu pokazuję kilka tutoriali i można się do nich poruszać zgodnie z kategoriami.

Teraz przycisk "Wstecz" (?) Na pasku akcji znajduje się na każdym ekranie, który mam i chcę go zachować. Kod nie pokazuje żadnego błędu, ale kiedy wciśniesz ten przycisk, aplikacja przestaje działać. Chcę tylko skopiować rzeczywistą funkcję przycisku wstecz za pomocą przycisku (Numer 1), który pokazałem na obrazku. Po naciśnięciu, najbardziej na górze ekranu powinien się zamknąć, a ostatni powinien się otworzyć. Po prostu zamknij ekran.

Co próbowałem:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 

      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

jest to funkcja, która napełnia ten przycisk buggy wraz z paska akcji. Próbowałem zastąpić cały kod i wywołać funkcję "Zakończ", ale to się nie udało. Nie mogłem znaleźć funkcji specjalnie utworzonej dla tego górnego lewego najbardziej większego przycisku ...

Chcę, aby zamknąć najwyższy ekran na stosie (ten na pierwszym planie), gdy ten przycisk zostanie dotknięty. Jak to zrobić?

Odpowiedz

30

Myślę, że najprostszym wyjściem jest następujący:

jestem przy założeniu, że z działalności A zaczynają działalność B. Teraz z działania B chcesz wrócić do działania A po naciśnięciu lewego górnego przycisku na pasku akcji. wystarczy zadzwonić lub ActivityName.this.finish()this.finish() stamtąd:

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

ten powinien zakończyć bieżącą działalność. Jednak jeśli masz dużo zajęć, być może będziesz musiał to zrobić we wszystkich działaniach. Aby uchronić się przed tym wysiłkiem, możesz sprawić, by klasa zadzwoniła pod numer AbstractActivity; która rozszerza się o Activity. Następnie możesz rozszerzyć wszystkie inne klasy aktywności, aby rozszerzyć tę klasę (AbstractActivity). Wewnątrz AbstractActivity możesz umieścić powyższy kod. Teraz ten fragment kodu byłby ważny dla wszystkich twoich działań i ta funkcja byłaby zaimplementowana dla wszystkich z nich. Zasadniczo tego rodzaju rzeczy (Inheritance) mogą być używane w dowolnym momencie, gdy istnieją pewne wspólne cechy, które będą miały zastosowanie do wielu klas.

Jeśli pojawią się jakiekolwiek błędy, proszę zamieścić swoje LogCat, jeśli potrzebujesz dalszej pomocy. Mam nadzieję, że to ci pomoże.

+0

Cześć! Próbowałem, ale nadal dawał ten sam problem. Jednak zrobiłem jedną rzecz, która sprawiła, że ​​to działało: - Usunąłem cały blok funkcji switch(), a zamiast tego umieść this.finish(); wraz z domyślnym zwrotem super.onOptionsItemSelected (element); Czy spowoduje to problemy? Mam na myśli usunięcie tej funkcji? Wydawało się, że działa dobrze ... Ponadto, w jakim pliku należy zdefiniować tę klasę AbstractActivity? Lub nowy oddzielny plik klasy? i w jakim folderze powinienem go zapisać? –

+0

................ –

+0

Nie jestem pewien, jakie mogą być tego następstwa. Czy kończy działanie po kliknięciu dowolnego przycisku na pasku akcji (ponieważ nie określamy przycisku)? Po drugie, jeśli chcesz iść tą drogą, klasa może być oddzielną klasą w tym samym folderze co inne pliki java. –

4

tylko dawać kod podstawowe podane przez @shobhit Puri ...

za wywoływanie pasek działań z powrotem button..add następujący kod w metodzie onCreate() wraz z onOptionsItemSelected ....

protected void onCreate(Bundle savedInstanceState) 
{ 
    ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_information); 
} 

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