わかりましたので、私はこれで何をすべきかに困惑しています。 MainActivityがあるので、そこからアクティビティをDegreePlanActivityに起動し、そこから別のアクティビティをEditDegreePlanに起動できます。 AndroidManifestでEditDegreePlanをnoHistoryに設定しました。問題は、EditDegreePlanを保存した後、DegreePlanにアクティビティを起動することです。そのため、ユーザーが[戻る]を押すと、もう一度MainActivityに到達するために2回押す必要があります。私はそれを取り除きたいので、彼らはそれを一度押すだけです。しかし、これを行う方法に困惑しています。
DegreePlanActivityをnoHistoryに設定すると、EditDegreePlanで[戻る]を押すことができませんでした。
OnBackPressedメソッドをオーバーライドして、MainActivityのインテントを起動しようとしました。問題は、アプリを終了するために戻るボタンを複数回押す必要があることです。
私は何をすべきか?
FLAG_ACTIVITY_CLEAR_TOP はアクティビティスタックをクリアします。以下のコードを使用できます。
Intent intent = new Intent(this, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
このフラグは中間アクティビティのみをクリアすることに注意してください。たとえば、Back Stack
その後、このフラグを使用してCアクティビティからDに移動するthisdos notclear Back Stack
およびスタックはA、B、C、Dになりますが、このフラグを使用してアクティビティDからアクティビティAに移動すると、B、C、Dアクティビティがスタックからポップアップし、バックスタックにAだけが表示されます。 。
aPIが15以上のAPI 23ユーザーアクティビティ名を意図したシンプルなソリューション。
Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(nextScreen);
ActivityCompat.finishAffinity(currentActivity.this);
Androidチュートリアル で説明されているように、EditDegreePlan-Activityを起動するときに、単にstartActivityForResult()
の代わりにstartActivity()
を使用することをお勧めします。
EditDegreePlan-Activityで、次に呼び出します
setResult(RESULT_OK);
finish();
EditDegreePlan-Activityからのデータを期待しない場合、onActivityResult
を必ずしも実装する必要はありません。
フラグをまったく指定しないと、目的の動作が得られるようです。戻るボタンは正しいことをするだけです。コード内からアクティビティを閉じるには、finish()
メソッドを使用します。これは、ユーザーが[戻る]ボタンを押した場合と同じ効果があります。したがって、EditDegreePlanを終了すると、DegreePlanに自動的に到着します。Intents
を呼び出す必要もありません。
フローは次のとおりです。
MainActivity-> DegreePlanActivty-> EditDegreePlan-> DegreePlan-> MainActivty
「DegreePlan」内でこれらのメソッドをオーバーライドします
public void onBackPressed() {
super.onBackPressed();
Intent goToMainActivity = new Intent(getApplicationContext(), MainActivity.class);
goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will clear out your activity history stack till now
startActivity(goToMainActivity);
}
新しいアクティビティを開始する前に、finishを呼び出すことができます。これにより、現在のアクティビティがアンロードされるため、次のアクティビティで戻るボタンを押すと、最初のアクティビティはもう存在しなくなります。
Intent i = new Intent(MainActivity.this, NextActivity.class);
finish();
startActivity(i);
これを使用してスタックをクリアします。
menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
マニフェスト内のバックスタックからアクティビティを削除するには、Android:noHistory="true"
マニフェストファイル内のアクティビティに。
以下のサンプルを参照してください。
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.activity"
Android:versionCode="1"
Android:versionName="1.0">
<application Android:name="MyApp" Android:label="My Application">
<activity Android:name=".LoginActivity"
Android:noHistory="true"> //add this line to your activity inside manifest
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Intent intent = new Intent(getContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
次のようにフラグを追加してアクティビティを開始し、以下のコードを試してください
Intent i = new Intent(activity, Payment.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(i);