Android的BackStack清楚,但保留根 [英] Android BackStack clear but keep root

查看:335
本文介绍了Android的BackStack清楚,但保留根的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在写一个聊天应用程序。它基本上是非常相似的WhatsApp:
在启动时有最后一次谈话概述。

I am currently writing a chat app. It is basically very similar to WhatsApp: On Startup there is last conversation overview.

当我要开始与某人一个新的对话我要做/通

When I want to start a new conversation with somebody I have to do/pass


  1. 最后的谈话概要活动(点击+查找对话伙伴)

  2. 课程活动(选择课程)

  3. 学员活动(选配合伙人)

  4. 对话活动

所以这是基本上堆栈:[A1,A2,A3,A4]

So that is Basically the stack: [A1, A2, A3, A4]

现在用户有一些当然成员闲话家常,并希望要回的最后一次谈话概述,但是当他presses后退按钮,他将获得A3的学员的活动。

Now the user had a nice chat with some course member and wants to get back to the last conversation overview but when he presses the back button he will get to A3, the "course participants activity".

我希望用户通过$ P $要回A1 pssing在A4后退按钮。

错:[A1,A2,A3,A4] - >背面 - >〔A1,A2,A3]结果
右:[A1,A2,A3,A4] - >背面 - >〔A1〕

WRONG: [A1, A2, A3 , A4] -> back -> [A1, A2, A3]
RIGHT: [A1, A2, A3 , A4] -> back -> [A1]

我也可以想像

RIGHT:A1,A2,A3] - >启动A4 - > [A1,A4]

RIGHT: [A1, A2, A3] -> start A4 -> [A1, A4]

先谢谢了。

答案

原来是这两者的组合。

在onOptionsItemSelected(),我把这个(当然在一个开关的情况下),因为鉴于谷歌公约。

in onOptionsItemSelected() I put this (in a switch case of course) because of the given google conventions.

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

定义活动A1的android:launchMode为singleTop你
  清单。

Define Activity A1's android:launchMode as singleTop at your manifest.

为什么兼而有之?只需添加平 Intent.FLAG_ACTIVITY_CLEAR_TOP 杀死活动A1。由于这是我的拳头活动它有一些注册/检查实施包括在内。当我开始这项活动已经被摧毁的onCreate后再次被不必要调用。

Why a combination? Just adding the Flat Intent.FLAG_ACTIVITY_CLEAR_TOP kills activity A1. As this was my fist activity it had some registration/checking implementation included. When I started this activity again after it has been destroyed onCreate was called unnecessarily.

该launchmode singletop prevents这一点。

The launchmode singletop prevents this.

推荐答案

定义活动A1的的android:launchMode singleTop 你的清单。
处理后退按钮preSS在活动A4和开始您的活动A1象下面这样:

Define Activity A1's android:launchMode as singleTop at your manifest. Handle back button press at Activity A4 and start your Activity A1 like below:

Intent intent = new Intent(A4.this,  A1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent); 

通过这个您的A2,A3将被从堆栈中清除。

With this your A2, A3 will be cleared from stack.

的意图看多。

编辑:这会为你的[A1,A2,A3,A4]工作 - >回 - > [A1]的要求

This will work for your [A1, A2, A3 , A4] -> back -> [A1] requirement

这篇关于Android的BackStack清楚,但保留根的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆