Jak zrestartować system Android Activity
? Próbowałem następujące, ale po Activity
prostu rezygnuje.
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
android
android-activity
Samet ÖZTOPRAK
źródło
źródło
Odpowiedzi:
Tak zmieniłem motyw:
Zasadniczo dzwonię
finish()
pierwszy i używam dokładnie tego samego celu, od którego zaczęło się to działanie. To wydaje się załatwić sprawę?AKTUALIZACJA: Jak wskazał Ralf poniżej,
Activity.recreate()
jest to droga do wyjścia w API 11 i późniejszych wersjach. Jest to preferowane, jeśli jesteś w środowisku API11 +. Nadal możesz sprawdzić bieżącą wersję i wywołać powyższy fragment kodu, jeśli korzystasz z API 10 lub niższego. (Proszę nie zapomnieć o głosowaniu na odpowiedź Ralfa!)źródło
Od poziomu API 11 (Honeycomb), możesz wywołać metodę createate () działania (dzięki tej odpowiedzi).
Metoda restore () działa jak zmiana konfiguracji, dlatego też metody onSaveInstanceState () i onRestoreInstanceState () są również wywoływane, jeśli ma to zastosowanie.
źródło
Przed pakietem SDK 11 można to zrobić w następujący sposób:
źródło
overridePendingTransition(0, 0);
po,finish()
astartActivity()
nie tam, gdzie toWystarczy połączyć odpowiedzi Ralfa i Bena (w tym zmiany wprowadzone w komentarzach):
źródło
Użyłem tego kodu, więc nadal mogłem obsługiwać starsze wersje Androida i używać go
recreate()
w nowszych wersjach Androida.Kod:
Próba:
źródło
To rozwiązanie działało dla mnie.
Najpierw zakończ działanie, a następnie uruchom je ponownie.
Przykładowy kod:
źródło
Jest to zdecydowanie najprostszy sposób na wznowienie bieżącej aktywności:
źródło
Nazwij tę metodę
Dzięki,
źródło
Mimo że udzielono na nie wielu odpowiedzi.
Jeśli zrestartujesz aktywność z fragmentu, zrobiłbym to tak:
Więc możesz myśleć, że to trochę przesada? Ale
Handler
publikowanie pozwala wywołać to w metodzie cyklu życia. Użyłem tej metody wonRestart
/onResume
podczas sprawdzania, czy stan zmienił się między powrotem użytkownika do aplikacji. (zainstalowałem coś).Bez
Handler
wywołania w dziwnym miejscu po prostu zabije to działanie i nie uruchomi go ponownie.Możesz zadawać pytania.
Na zdrowie Chris
źródło
Cóż, nie ma go na liście, ale zestawienie niektórych, które jest już opublikowane:
źródło
W połączeniu z dziwnym zachowaniem cyklu życia SurfaceView z kamerą . Przekonałem się, że metoda replace () nie zachowuje się dobrze w cyklu życia SurfaceViews. SurfaceDestroyed nigdy nie jest wywoływany podczas cyklu rekreacyjnego. Jest wywoływany po onResume (dziwne), w którym to momencie mój SurfaceView zostaje zniszczony.
Oryginalny sposób odtworzenia działania działa dobrze.
Nie mogę dokładnie zrozumieć, dlaczego tak jest, ale jest to tylko obserwacja, która, mam nadzieję, może poprowadzić innych w przyszłości, ponieważ naprawiła moje problemy, które miałem z SurfaceViews
źródło
Zastanawiam się, dlaczego nikt nie wspomniał o tym,
Intent.makeRestartActivityTask()
co dokładnie czyni ten cel.Ta metoda ustawia
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
jako domyślne flagi.źródło
W rzeczywistości poniższy kod jest prawidłowy dla poziomów API 5 i wyższych, więc jeśli docelowy interfejs API jest niższy niż ten, otrzymasz coś bardzo podobnego do kodu EboMike.
źródło
Jest jeden zhackowany sposób, który powinien działać przy każdej aktywności, w tym głównej.
Kiedy orientacja się zmienia, Android zazwyczaj odtworzy Twoją aktywność (chyba że ją zastąpisz). Ta metoda jest przydatna w przypadku obrotu o 180 stopni, gdy Android nie odtworzy Twojej aktywności.
źródło
spróbuj użyć tego ..
źródło
Rozwiązaniem twojego pytania jest:
Musisz przerzucić do kontekstu działania, aby rozpocząć nowe działanie, a także zakończyć bieżące działanie.
Mam nadzieję, że to pomocne .. i działa dla mnie.
źródło
Jeśli usuniesz ostatni wiersz, utworzysz nowe
act
działanie, ale Twoja stara instancja będzie nadal żywa.Czy musisz zrestartować działanie tak, jak przy zmianie orientacji (tzn. Twój stan jest zapisany i przekazany
onCreate(Bundle)
)?Jeśli tego nie zrobisz, jednym z możliwych obejść byłoby użycie jednego dodatkowego, pozorowanego działania, które byłoby uruchamiane od pierwszego działania, i którego zadaniem jest rozpoczęcie nowej instancji. Lub po prostu opóźnij połączenie z
act.finish()
, po uruchomieniu nowego.Jeśli chcesz uratować większość stanu, wchodzisz na dość głębokie wody, ponieważ przekazanie wszystkich właściwości swojego stanu, szczególnie bez wycieku starego kontekstu / działania, nie jest trywialne, poprzez przekazanie go do nowej instancji.
Proszę określić, co próbujesz zrobić.
źródło
Tak to robię.
źródło
Jeśli dzwonisz z jakiegoś fragmentu, zrób to poniżej kodu.
źródło
możesz po prostu użyć
metoda w następujący sposób
i wywołaj onRestart (), gdzie chcesz zrestartować bieżącą aktywność
źródło
Wywołaj metodę onCreate. Na przykład
onCreate(null);
źródło