在我的应用程序中有三个活动。Android:清除堆栈中的第二个活动(或清除特定活动)
A
可以打开B
B
可以打开C
,或返回A
,或返回C
(如果从C
打开)
C
可以打开B
,或返回A
我已经使用各种RESULT_CODE
和onActivityResult
来实现这一点。但是,长时间使用应用程序后堆栈变得太大了!
我需要清除栈中的活动。看看我的应用程序的结构,最好的清算方法围绕清除堆栈上的第二个活动(假设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
?
不知道你的活动在做什么,但这听起来像是一个完美的碎片用例。查看我的答案在这里,https://stackoverflow.com/questions/34667170/manage-the-backstack-in-android/34667350#34667350,重新使用堆栈中的现有片段和限制后台堆栈深度的示例。 –