web-dev-qa-db-ja.com

一部のアクティビティに「戻る」を無効にするにはどうすればよいですか?

ユーザーがアプリのスプラッシュスクリーンに戻ることができないようにします。 1つの解決策は、現在のアクティビティより下のアクティビティがスプラッシュスクリーンのインスタンスであるかどうかを確認し、その場合は以下のコードに示すようにアプリを終了することです。ただし、スタック内の以前のアクティビティを確認する方法がわかりません。誰でも助けることができますか?特定のアクティビティに「戻る」を無効にする他の方法はありますか?

@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);
    }
}
37
jul

次のアクティビティを開始した直後に、スプラッシュスクリーンアクティビティでfinish()を呼び出します。

別のアプローチは、AndroidManifest.xmlAndroid:noHistory="true"のアクティビティにこの属性を追加することです

例:

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

この属性は、Androidに移動すると、履歴スタックからSplashActivityを削除するよう指示します。

121
Ryan Reeves

context.finish()の後にcontext.startActivity()を呼び出すだけです

20
LeffelMania

スプラッシュスクリーンから次のActivityを呼び出すときに、次を試してください。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
9
A. Binzxxxxxx
<activity Android:name=".SplashActivity" Android:noHistory="true"/>

ドキュメント から:

ユーザーが移動して画面に表示されなくなったときに、アクティビティをアクティビティスタックから削除して終了する(finish()メソッドを呼び出す)かどうか。終了する場合は「true」、終了する場合は「false」そうでない場合。デフォルト値は「false」です。

「true」の値は、アクティビティが履歴トレースを残さないことを意味します。タスクのアクティビティスタックに残っていないため、ユーザーはタスクスタックに戻ることができません。この場合、このアクティビティの結果に対して別のアクティビティを開始した場合、onActivityResult()は呼び出されません。

この属性は、APIレベル3で導入されました。

2
David Miguel