web-dev-qa-db-ja.com

現在のアクティビティを置き換える

現在のアクティビティを新しいアクティビティに置き換える必要があります。つまり、新しいアクティビティを開始し、現在のアクティビティをタスクスタックから削除します。

ドキュメントに基づいて、最善の方法は、通常どおり Activity.startActivity を使用してアクティビティを開始し、すぐに Activity.finish を呼び出して現在のアクティビティを閉じることです。

これはこれらのAPIの有効な使用法ですか、それとも他に何かすべきですか?

61
Richard Szalay

はい。この方法でapiを使用しても問題ありません。

56
Tushar

これを実現する適切な方法は、以下を使用することです。

Intent intent = new Intent(this,MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
this.finish();

コードは、あなたがアクティビティにいると想定します。それ以外の場合、フラグメントを使用している場合はgetActivity()を使用します

このようにして、アクティビティが開始され、戻るボタンの階層が適切に設定され、適切なアクティビティも破棄されます。

30
Jeremie

FLAG_ACTIVITY_TASK_ON_HOMEFLAG_ACTIVITY_NEW_TASKインテントフラグ

6
user838411

アクティビティにAndroid:launchMode = "singleInstance"を追加し、onNewIntentメソッドをオーバーライドして日付を更新できます

参照 ExoPlayerデモのPlayerActivity

4
Fangming Cheng

アクティビティを開始するときにFLAG_ACTIVITY_CLEAR_TASKを使用できます。また、マニフェストのアクティビティのlaunchModeをsingleTaskとして定義しましたが、それは、新しいアクティビティでその動作が必要だったためです。 startActivityにフラグFLAG_ACTIVITY_CLEAR_TASKを渡す限り、新しいアクティビティでlaunchModeに何を使用しても、前のアクティビティのクリアに関して必要なものを取得できると思います。

0
Andy Weinstein