2011-06-16 17 views
34

Nie chcę, aby użytkownik mógł wrócić do ekranu powitalnego mojej aplikacji. Wydaje się, że jednym z rozwiązań jest sprawdzenie, czy działanie poniżej bieżącego jest wystąpieniem ekranu powitalnego, a w takim przypadku zamknięcie aplikacji, jak pokazano w poniższym kodzie. Nie wiem jednak, jak sprawdzić, jaka jest poprzednia aktywność w stosie. Ktoś może pomóc? Czy jest jakiś inny sposób wyłączenia "powrotu" do danego działania?Jak mogę wyłączyć "powrót" do niektórych działań?

@Override 
public void onBackPressed() { 
    if(<previous activity in stack is an instance of splashscreen>){ 
     Intent exit_intent=new Intent(CurrentActivity.this, SplashScreen.class); 
     exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     exit_intent.putExtra("EXIT", true); 
     context.startActivity(exit_intent); 
    } 
} 

Odpowiedz

110

Zadzwoń pod numer finish() w działaniu ekranu powitalnego zaraz po rozpoczęciu następnego działania.

Innym podejściem jest dodanie tego atrybutu do swojej aktywności w AndroidManifest.xml: android:noHistory="true"

Przykład:

<activity android:name=".SplashActivity" android:noHistory="true"/> 

Ten atrybut instruuje Android usunąć SplashActivity z historii stosu po jego nawigacja z dala od.

+0

dzięki dużo "Android: Nohistory =" true "" - to był bardzo pomocny! – Simcha

+0

Dlaczego funkcja finish() działa? – Joop

+0

finish() (po dodaniu w pierwotnej aktywności zaraz po rozpoczęciu następnej czynności) działa, ponieważ Android nie "wraca" do działania, które zostało zakończone (zniszczone), tylko do tych, które są wstrzymane lub zatrzymane (żywe). –

19

Wystarczy zadzwonić context.finish() po context.startActivity()

+5

Dobra alternatywa, znana jako [forwarding] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html) –

+0

Może nie działa, gdy odtwarzasz plik multimedialny po rozpoczęciu następnej czynności. Ponieważ może zostać skrócony. – Mike6679

+0

nie działa dla mnie sdk 22 .... – Micro

9

wypróbować następującą Dzwoniąc następnym Activity z Twojego ekran powitalny:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
2
<activity android:name=".SplashActivity" android:noHistory="true"/> 

Z documentation:

czy aktywność należy usunąć ze stosu działań i zakończona (wywołana metoda finish), gdy użytkownik odejdzie z niej i nie będzie już widoczny na ekranie - "true", jeśli powinien być zakończony, a "false", jeśli nie. Domyślna wartość to "false".

Wartość "prawda" oznacza, że ​​działanie nie pozostawi śladu historycznego . Nie pozostanie w stosie działań dla zadania, więc użytkownik użytkownik nie będzie mógł do niego wrócić. W takim przypadku, onActivityResult() nigdy nie jest wywoływane, jeśli uruchomisz inną aktywność dla wyniku z tego działania.

Atrybut ten został wprowadzony w Level API 3.

Powiązane problemy