Подтвердить что ты не робот

Android удаляет активность из заднего стека

Хорошо, поэтому я немного застенчив, что с этим делать. Таким образом, у меня есть MainActivity, и оттуда в DegreePlanActivity можно запустить Activity, а оттуда в EditDegreePlan можно запустить другое действие. У меня EditDegreePlan установлен в noHistory в AndroidManifest. Проблема заключается в том, что после сохранения EditDegreePlan он запускает Activity to DegreePlan. Поэтому, если пользователь нажимает "Назад", он должен нажать его дважды, чтобы снова вернуться к MainActivity. Я хочу избавиться от этого, поэтому им нужно только нажать его один раз. Я не понимаю, как это сделать.

Если я установил DegreePlanActivity в noHistory, они не могли бы нажать Back to it в EditDegreePlan.

Я попытался переопределить метод onBackPressed и запустить намерение MainActivity. Проблема в том, что они должны нажать Back несколько раз, чтобы выйти из приложения.

Что мне делать?

4b9b3361

Ответ 1

FLAG_ACTIVITY_CLEAR_TOP очищает ваш стек Activity, вы можете использовать код ниже:

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

Помните, что этот флаг очищает только промежуточные действия, например, если у вас есть A, B, C в вашем Back Stack затем при переходе от C Activity к D с этим флагом это не очищает Back Stack и стек будет A, B, C, D, но если вы перейдете от Деятельности D к Деятельности A с этим флагом, B, C, D Деятельности выскочит из стека, и у вас будет только А в Back Stack.

Ответ 2

простое решение для 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);

Ответ 3

Я бы предположил, что вместо startActivity() вы используете startActivityForResult(), когда вы запускаете EditDegreePlan-Activity, как описано в обучающие программы для Android.

В EditDegreePlan-Activity вы вызываете

setResult(RESULT_OK);
finish();

Если вы не ожидаете каких-либо данных из EditDegreePlan-Activity, вам необязательно реализовать onActivityResult.

Ответ 4

Кажется, что вы получите желаемое поведение, если вообще не укажете какие-либо флаги. Кнопка "назад" просто поступила бы правильно. Чтобы получить активность, закрытую из вашего кода, используйте метод finish(), который имеет тот же эффект, что и пользователь, нажимая кнопку "Назад". Таким образом, вы автоматически прибудете в DegreePlan, когда закончите EditDegreePlan, не нужно также вызывать любые Intents.

Ответ 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);
}

Ответ 6

используйте это, чтобы очистить стек:

 menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);

Ответ 7

Вы можете позвонить до окончания своей новой деятельности. Это будет выгружать текущее действие, поэтому, когда вы нажимаете кнопку "Назад", а затем следующее действие, первое действие больше не будет там.

Intent i = new Intent(MainActivity.this, NextActivity.class);
finish();  
startActivity(i);

Ответ 8

Вы можете добавить флаги следующим образом и запустить Activity, попробуйте код ниже

Intent i = new Intent(activity, Payment.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(i);

Ответ 9

Чтобы удалить активность из заднего стека внутри манифеста, добавьте 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>

Ответ 10

Intent intent = new Intent(getContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

startActivity(intent);