79

さて、私はこれをどうするかについてちょっと困惑しています。つまり、MainActivityがあり、そこからDegreePlanActivityに対してアクティビティを起動し、そこからEditDegreePlanに対して別のアクティビティを起動できます。AndroidManifestでEditDegreePlanをnoHistoryに設定しました。問題は、EditDegreePlanを保存した後、DegreePlanへのアクティビティを起動することです。したがって、ユーザーが[戻る]を押すと、MainActivityに再度アクセスするために2回押す必要があります。私はそれを取り除きたいので、彼らはそれを一度押すだけで済みます。しかし、私はこれを行う方法に困惑しています。

DegreePlanActivityをnoHistoryに設定すると、EditDegreePlanにいる間はBackを押すことができませんでした。

onBackPressedメソッドをオーバーライドして、MainActivityへのインテントを起動してみました。問題は、アプリを終了するために[戻る]を複数回押す必要があることです。

私は何をすべきか?

4

11 に答える 11

153

FLAG_ACTIVITY_CLEAR_TOPはアクティビティスタックをクリアします。以下のコードを使用できます。

Intent intent = new Intent(this, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

このフラグは中間アクティビティのみをクリアすることに注意してください。たとえば、A、B、Cが含まれている場合、Back Stackこのフラグを使用してCアクティビティからDに移動すると、これはクリアされBack Stack、スタックはA、B、C、Dになります。このフラグを使用してアクティビティDからアクティビティAに移動すると、B、C、Dアクティビティがスタックからポップアップ表示され、バックスタックにAだけが表示されます。

于 2013-01-01T16:53:17.690 に答える
17

API>=15からAPI23のユーザーアクティビティ名の単純なソリューション。

 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);
于 2016-11-04T18:03:46.863 に答える
15

Androidチュートリアルで説明されているように、EditDegreePlan-Activityを起動するときstartActivityForResult()は、単にではなく、を使用することをお勧めします。startActivity()

EditDegreePlan-Activityで、

setResult(RESULT_OK);
finish();

EditDegreePlan-Activityからのデータを期待しない場合は、必ずしもを実装する必要はありませんonActivityResult

于 2014-05-05T15:03:45.383 に答える
13

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>
于 2019-06-27T03:16:25.393 に答える
7

フラグをまったく指定しないと、目的の動作が得られるようです。戻るボタンはちょうどいいことをするでしょう。コード内からアクティビティを閉じるfinish()には、ユーザーが戻るボタンを押すのと同じ効果があるメソッドを使用します。したがって、EditDegreePlanを終了すると、自動的にDegreePlanに到達しIntentsます。どちらも呼び出す必要はありません。

于 2013-01-01T16:56:19.813 に答える
6

新しいアクティビティを開始する前に、finishを呼び出すことができます。これにより、現在のアクティビティがスタックから削除されるため、次のアクティビティから戻るボタンを押しても、最初のアクティビティはスタック履歴から呼び出されません。

Intent i = new Intent(MainActivity.this, NextActivity.class);
finish();  
startActivity(i);
于 2018-05-28T20:48:58.310 に答える
5

これがあなたの流れです:

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);
}
于 2013-01-01T17:03:47.787 に答える
2

これを使用してスタックをクリアします:

 menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
于 2017-06-22T05:14:54.547 に答える
1
Intent intent = new Intent(getContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

startActivity(intent);
于 2019-07-17T15:39:59.490 に答える
0

次のようにフラグを追加してアクティビティを開始できます。以下のコードを試してください

Intent i = new Intent(activity, Payment.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(i);
于 2019-03-12T11:50:20.153 に答える
0
This code should help you out: It is in Kotlin
private fun verifyIfUserIsLoggedIn(){
        val uid = FirebaseAuth.getInstance().uid
        if(uid== null){
            val intent = Intent(this, MainActivity::class.java)
            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
            startActivity(intent)
        }
    }
于 2020-06-30T14:44:39.337 に答える