Tworzę aplikację, która po naciśnięciu przycisku otwiera okno dialogowe z przyciskami OK i Anuluj.
To działa dobrze.
Kiedy użytkownik naciska przycisk Wstecz, postępuję w następujący sposób
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
}
return super.onKeyDown(keyCode, event);
}
Ale powyższa metoda nie jest wywoływana. Jak sobie z tym poradzić?
Odpowiedzi:
źródło
Dialog
;finish()
już się tym zajmuje. Ta metoda prawdopodobnie powinna powrócić,false
aby móc uchwycić kluczowe wydarzenia w innym miejscu&& event.getAction() == KeyEvent.ACTION_UP
do odpowiedzi. Bez tego blok kodu zostanie wykonany dwukrotnie. (Klawisz w dół i klawisz w górę). W tym przykładzie nie jest to takie ważne, ale dla innych akcji niż finish () może być bardzo ważne.dialog.dismiss()
spowoduje wyciek pamięci.finish()
idialog.dismiss()
powinien zostać zamieniony w powyższym kodzie.Wygląda na to, że chcesz ustawić OnCancelListener podczas tworzenia okna dialogowego. To wygląda tak:
źródło
Musisz zastąpić
OnCancel
metodę. Ta metoda wymaga naciśnięcia klawisza Wstecz. Oto kod, który dla mnie działa idealnie.Mam nadzieję, że to ci pomoże i zaakceptuj je, jeśli okaże się to pomocne.
Dzięki..
źródło
Spróbuj tego
źródło
Jeśli używasz DialogFragment, z tego, co mogę powiedzieć, należy to zrobić, aby zastąpić onCancel ()
Zauważyłem,
setOnCancelListener
że nie działa isetOnKeyListener
działa, ale dla mnie ma fajny efekt uboczny, że połyka wszystkie klawisze, jeśli twoje okno dialogowe ma tekst edycji.źródło
Dzieje się tak dlatego, że kiedy otwiera się okno dialogowe, okno przechodzi do okna dialogowego. Więc teraz musisz zająć
key
się swoim dialogiem.źródło
key
w oknie dialogowym.Zastąp metodę
onBackPressed()
w swoim własnym oknie dialogowym i użyj jej w swoim kodzie:Posługiwać się:
źródło
Ten kod działa:
źródło