2013-04-11 13 views
8

Chcę wiedzieć, czy gdy użytkownik naciśnie "Tak" w oknie dialogowym alertu, a ten zostanie zwolniony, to zdarzenie wykonuje metodę onResume działania, w którym znajduje się użytkownik.Wywołanie metody onResume po usunięciu alertu w systemie Android?

Ponieważ mam "Wyczyść" "przycisk, który pyta użytkownika, czy jest naprawdę pewien czyszczenia wszystkich pól formularza (działania), aby przerysować działanie z pustymi polami. Formularz jest tworzony dynamicznie, więc nie znam a priori elementów w GUI, aby ustawić je puste ...

Przepraszamy za mój zły angielski!

Dzięki i pozdrawiam!

+0

jeśli chcesz wykryć, kiedy użytkownik zrobił coś, możesz użyć wartości logicznej, która będzie fałszywa na początku i na true przy dodatnim kliknięciu przycisku? –

Odpowiedz

15

Nie jestem pewien, czy jest to podejście, które powinno być podjęte, ale powinieneś być w stanie zrobić to, o czym myślę, że prosisz. Jeśli z jakiegoś powodu jest to coś, co chciałbyś osiągnąć.

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Do you want to clean?") 
     .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
     { 
     public void onClick(DialogInterface dialog, int id) 
     { 
      dialog.dismiss(); 
      ((ActivityName) appContext).onResume(); 
     } 
     }) 
     .setNegativeButton("No", new DialogInterface.OnClickListener() 
     { 
     public void onClick(DialogInterface dialog, int id) 
     { 
      dialog.dismiss(); 
     } 
     }); 
    builder.create().show(); 
} 

Będziesz naprawdę chcą być nazywając swoją czystą funkcję zamiast niczego podobnego połączenia cyklem na sukces robiąc nic na niepowodzenie.

Innym potencjalnym sposobem podejścia do tej sytuacji jest przywrócenie bieżącej działalności z powrotem za pomocą flag.

Intent intent = new Intent(this, CurrentlyRunningActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

co również stanowić sposób, aby zadzwonić na swojej głównej działalności bez bezpośredniego odwoływania się onResume() połączenia, jak podkreślił, nie jest właściwe podejście; jednak chciałem bezpośrednio odpowiedzieć na to pytanie, ponieważ zostało zadane.

+4

Wywołanie 'onResume' ręcznie oznacza * absolutnie nie możliwe * –

0

AFAIK Nie jest to możliwe, ponieważ aby wyświetlić okno dialogowe, działanie już przeszło stan onResume. Sprawdź następującą stronę więcej na cyklu życia aplikacji na Androida (to naprawdę pomogło mi zrozumieć lepiej):

App lifecycle

+0

To, co mówisz, to że kiedy alert jest na ekranie, nie powoduje on aktywności w tle? nadal jest na pierwszym planie? –

+0

@alois.wirkes To dobre pytanie, którego nie jestem pewien. Jednak myślę, że powinieneś rzucić okiem na odpowiedź codeMagic. Prawdopodobnie nie powinieneś przerysowywać układów, aby usuwać pewne rzeczy, ale powinien użyć 'setText()'. Wystarczy nacisnąć przycisk Tak w oknie dialogowym, aby wywołać metodę, która spełnia wymagania użytkownika. – TronicZomB

0

Jeśli nie jesteś pewien, kiedy onResume nazywa, dodać zalogować się do Metoda onResume.

1

Aby sprawdzić, czy wywoływana jest metoda, można umieścić punkt przerwania w metodzie, onResume(), aby zobaczyć, co się stanie. Jeśli nie jesteś zaznajomiony z cyklem życia Acitvity, wykonanie tego pomoże ci zapoznać się z nim i przeczytać dostarczoną dokumentację.

Nie sądzę, że powinieneś przerysować całą swoją layout tylko po to, aby wyczyścić część Views. Byłoby, moim zdaniem, skuteczniejsze resetowanie wszystkich pól przy użyciu metody setText() lub innej metody dla wszystkiego, czego potrzebujesz, gdy użytkownik kliknie "ok" lub cokolwiek innego. Można użyć invalidate() jeśli trzeba przerysować pewien Views

Polecam również oglądanie

Google I/O-Turbo Charge Your UI

Activity LifeCycle < - bardzo ważne, aby zrozumieć

Powiązane problemy