Можно ли запустить действие в стеке, очистив весь история до этого?
Ситуация
У меня есть стек активности, который либо идет A-> B-> C, либо B-> C (экран A выбирает токен пользователя, но многие пользователи имеют только один токен).
На экране C пользователь может предпринять действие, которое делает экран B недействительным, поэтому приложение хочет перенести их на экран A, независимо от того, находится ли он уже в стеке. Тогда экран А должен быть единственным элементом в стеке в моем приложении.
Примечания
Есть много других подобных вопросов, но я не нашел ничего, что отвечало бы на этот точный вопрос. Я попытался вызвать getParent (). Finish ()
- это всегда приводит к исключению нулевого указателя. FLAG_ACTIVITY_CLEAR_TOP
работает, только если действие уже находится в стеке.
Не меняйте стек. Кнопка возврата Android должна работать как в веб-браузере.
Я могу придумать, как это сделать, но это настоящий взлом.
Сделайте свои действия singleTask
, добавив их в AndroidManifest
Пример:
Расширьте Приложение
, которое будет содержать логику того, куда идти.
Пример:
public class DontHackAndroidLikeThis extends Application {
private Stack<Activity> classes = new Stack<Activity>();
public Activity getBackActivity() {
return classes.pop();
}
public void addBackActivity(Activity activity) {
classes.push(activity);
}
}
От A до B:
DontHackAndroidLikeThis app = (DontHackAndroidLikeThis) getApplication();
app.addBackActivity(A.class);
startActivity(this, B.class);
От B до C:
DontHackAndroidLikeThis app = (DontHackAndroidLikeThis) getApplication();
app.addBackActivity(B.class);
startActivity(this, C.class);
В C:
If ( shouldNotGoBackToB() ) {
DontHackAndroidLikeThis app = (DontHackAndroidLikeThis) getApplication();
app.pop();
}
и обработайте кнопку возврата, чтобы вытолкнуть ()
из стека.
Опять же, не надо этого делать :)