Как удалить свой Activity setContentView из заднего стека? - PullRequest
1 голос
/ 06 мая 2020

В Stackoverflow есть сотня вопросов по этому поводу, но ни один из них не касается моей конкретной c проблемы.

Я начинаю свою деятельность с этим кодом как с функцией c в моем Класс активности:

fun startForResult(activity: Activity, code: Int) {
    val intent = Intent(activity, MyActivity::class.java)
    activity.startActivityForResult(intent, code)
    activity.overridePendingTransition(R.anim.none, R.anim.none)
}

Когда MyActivity запускается, запускается onCreate и setContentView(R.layout.activity) внутри него. Кажется, это go на заднем стеке. В Activity есть только FrameLayout, который является полноэкранным и является заполнителем / фреймом для фрагментов, которые я хочу загрузить. Моя деятельность очень проста, как мастер с 3 фрагментами / экранами, все в полноэкранном режиме. Как только мое действие OnCreate завершится, мой докладчик загрузит первый фрагмент, FragmentA, используя такой код:

supportFragmentManager
    .beginTransaction()
    .replace(R.id.myContentFrame, FragmentA.newInstance())
    .addToBackStack(null)
    .commit()

Это также идет в задний стек. Пользователь нажимает следующую кнопку, и мой докладчик запускает этот код:

supportFragmentManager
    .beginTransaction()
    .replace(R.id.myContentFrame, FragmentB.newInstance())
    .addToBackStack(null)
    .commit()

Когда пользователь нажимает кнопку «Назад» на FragmentB, он возвращает пользователя к FragmentA, и это нормально. Моя проблема возникает, когда они нажимают кнопку «Назад» на FragmentA, она выводит их на чистый экран, что, по-видимому, является событием setContentView(R.layout.activity), оно было добавлено в задний стек, и я возвращаюсь к нему. Поэтому я бы хотел, чтобы это событие, начало Activity и его невидимый макет НЕ добавлялись в задний стек. Когда пользователь находится на FragmentA и нажимает кнопку «Назад», я бы хотел, чтобы действие завершилось sh. Я пробовал кучу разных вещей, чтобы избавиться от этой setContentView(R.layout.activity) транзакции в моем заднем стеке, но ничего не помогло. Я предполагаю, что есть простое решение, например установка ФЛАГА, но оно ускользнуло от меня. Раньше я переопределял метод OnBackPress и полагаю, что это сработает, но мне все еще интересно, есть ли более простой способ удалить этот первый элемент (Activity) из моего заднего стека, не требуя от меня переопределения OnBackPressed.

Что мне не хватает?

1 Ответ

2 голосов
/ 06 мая 2020

Думаю, вам не нужно добавлять в задний стек фрагмент A. Когда в фрагменте A пользователь снова нажимает Activity, будет завершено sh!

...