2012-04-03 9 views
8

Mam klasę A, która prowadzi działalność za pośrednictwem startActivityForResult, przekazując do niej Intent. W innej klasie powiedzmy B, otrzymam to Intent i ponownie utworzę przez niego aktywność. Jak mogę odsłuchać zdarzenia dla tej aktywności, np. Aktywność, która została uruchomiona dla wyniku, jest uruchomiona, a użytkownik nacisnął przycisk "Wstecz", więc chcę wykonać pewne działanie. Jak mogę to zrobić? Dziękuję z góry.Jak ustawić obiekt nasłuchującyBackButton na działanie

Aktywność, w której odtwarzam instancję obiektu, nie jest pochodną klasy aktywności. To tylko AKTYWNOŚĆ. Więc mam tylko obiekt. czy jest jakiś sposób na zrobienie takich rzeczy za pomocą klasy, ale nie klasy?

Odpowiedz

1

Można zastąpić onDestroy i umieścić tam kod.

Inną możliwością (i może lepiej pasować do twoich potrzeb) jest przesłonięcie onBackPressed.

+2

Czy nie zostanie to wywołane przez system, jeśli Działanie zostanie zniszczone, na przykład z powodu braku pamięci? Nie jestem pewien, po co jest OP. –

+0

Masz rację, chociaż myślę, że ogólnie lepiej jest śledzić cykl życia aktywności i nie być związanym z kluczami. – MByD

+0

Cóż, to zależy od wymagań. W jednej z moich aplikacji mam działanie, którego widok zmienia się w zależności od działania użytkownika. Po naciśnięciu klawisza "Wstecz" przywracam stan pierwotny (jeśli jestem w stanie zmienionym) lub kończę działanie. W tym przypadku cykl życia nie pomoże mi. –

4

W działalności, w którym chcesz działać na przycisk „Wstecz”, po prostu zastąpić onKeyDown (lub onKeyUp) metoda:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     //do whatever you need for the hardware 'back' button 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

Pamiętaj, że jeśli chcesz, aby przycisk „Wstecz”, aby nadal kończy swoją działalność, to musisz to

setResult(result); //if you want to pass a result to activity A 
finish(); 

gdzieś w tym warunkowy przed return true;

Powiązane problemy