今天接到一个需求,大概是这样的。假设A部分有BCD三个子部门,而D又有EF两个子部门,要选择其中一个部门,选到最终极的时候就要返回到最初的页面并展示,如果有子集部门就继续展示子集部门并显示。
其实抽丝剥茧,这个需求也就是需要在最后一个页面,要把前面的activity都finish,直接跳回到首页。
方法一:首先的思路,我第一个想到的方法是建立一个Activity栈,每打开一个便把其存入栈中,然后等到最后一个页面,需要finish的时候把所有栈中的finish。具体代码就不上了,百度也有很多,个人觉得这个方法比较暴力、
方法二:利用startActivityForResult回调,具体思路就是,每次启动activity都有startActivityForResult方式启动,比如A启动B,B启动C,到最后一个D的时候返回,然后在C的onActivityResult内在继续返回,知道第一个,这样的链式回调可以保证很好的退回到第一个Activity,最重要的是返回数据也方便,具体代码如下:
在这段代码中,我对数据的操作可以忽略不计(项目需求需要),主要是利用startActivityForResult跳转到lifeSelectBranchActivity,一直诸如此类跳转到最后一个子节点Activity。
这段代码是对返回的操作,可以看见,在onActivityResult方法中继续返回,诸如此类,直到第一个activity。
方法三:本来这两种方法已经够用了,但我突然想到singleTask(虽然本人平时不怎么用启动模式),singleTask的解释如下:
注意重点,并且清空这个activity任务栈上面的所有的activity,这不就是正好满足我们的需求吗?于是抱着试一试的心态,我把第一个Activity A的启动模式设为singleTask,到了最后一个activity,直接finish,然后启动A ,发现竟然也是可以完美实现。代码比较简单,读者可以自己按照思路试试。
就是这么多了,如果上述几种方法有什么不足之处,还望多多解答。