【发布时间】:2016-01-20 18:38:46
【问题描述】:
在我的应用中有三个活动。
A可以打开B
B可以打开C,或者返回A,或者返回C(如果从C打开)
C可以打开B,或者返回A
我已经使用各种RESULT_CODEs 和onActivityResults 实现了这一点。但是,长时间使用该应用后,堆栈变得太大了!
我需要从堆栈中清除活动。查看我的应用程序的结构,最好的清除方法围绕着清除堆栈上的 第二个 活动(假设 A 始终是堆栈上的第一个/底部活动)。为了便于理解,我画了一张速写:
一旦将B 添加到ABC 上,之前的B(堆栈中的第二个活动)就会被删除。将C 添加到ACB 后,将删除先前的C(堆栈中的第二个活动)。
我可以想到两种方法来做我描述的事情:
清除堆栈中的第二个活动
删除堆栈中与我正在创建的活动相同的所有活动(
C创建B,因此需要清除另一个B)
但是,我还没有找到在代码中实现这一点的方法。我曾尝试使用Intent.FLAG_ACTIVITY_CLEAR_TOP,但这会清除堆栈中除A 之外的所有内容,然后在顶部添加新活动。
所以我的问题是:我怎样才能实现方法 1 或方法 2?(不管是哪一个)
这是我清除堆栈中所有但 A 的示例:
Intent newActivity = new Intent(this, B.class);
newActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(newActivity, MY_REQUEST_CODE);
我也愿意接受其他方法。也许以某种方式使用FLAG_ACTIVITY_NO_HISTORY?
【问题讨论】:
-
不确定您的活动在做什么,但这听起来像是片段的完美用例。在此处查看我的答案stackoverflow.com/questions/34667170/…,以获取重用堆栈中现有片段并限制回栈深度的示例。