首页 > 代码库 > 打开多个Activity后,任意关闭其中几个、后面几个或者前面几个的解决办法
打开多个Activity后,任意关闭其中几个、后面几个或者前面几个的解决办法
先说一个实际的场景,比如一个购物的App。用户进来先去浏览商品,选好了。打算付款,这个时候停留在Activity1.java。这个时候提示没有登录,就会跳转到登录页面Activity2.java。用户发现自己还没有账号。点击登录旁边的注册按钮就跳转到Activity3.java。注册之后,再登录,登录之后发现没钱,就跳转到充值界面Activity4.java。最后充值成功,关闭之前所有界面只留下付款页面,也就是Activity1.java。
在这个过程中。用户随时可以点击返回,也要一步一步返回回去,比如在注册的时候不想注册,点击返回还要退到登录界面。所以你还不能在跳到注册的是把登录的Activity finish掉。
这一系列的流程跳转怎么来处理了。开始我也头痛,后来想到一个办法。
思路如下:我们可以定义一个缓存池,把之前所有打开的Activity页面作为对象都放进去,到最后清空一下这个缓存就行了。
代码如下:
public class CacheActivity { public static List<Activity> activityList = new LinkedList<Activity>(); public CacheActivity() { } /** * 添加到Activity容器中 */ public static void addActivity(Activity activity) { if (!activityList.contains(activity)) { activityList.add(activity); } } /** * 便利所有Activigty并finish */ public static void finishActivity() { for (Activity activity : activityList) { activity.finish(); } } /** * 结束指定的Activity */ public static void finishSingleActivity(Activity activity) { if (activity != null) { if (activityList.contains(activity)) { activityList.remove(activity); } activity.finish(); activity = null; } } /** * 结束指定类名的Activity 在遍历一个列表的时候不能执行删除操作,所有我们先记住要删除的对象,遍历之后才去删除。 */ public static void finishSingleActivityByClass(Class<?> cls) { Activity tempActivity = null; for (Activity activity : activityList) { if (activity.getClass().equals(cls)) { tempActivity = activity; } } finishSingleActivity(tempActivity); } }
<span style="font-size:18px;color:#ff0000;">我们在<strong>每个</strong>Activity中,都在onCreate方法中加入如下代码:比如在Activity1.java中的onCreate</span>
<pre name="code" class="java">if (!CacheActivity.activityList.contains(Activity1.this)) { CacheActivity.addActivity(<span style="font-family: Arial, Helvetica, sans-serif;">Activity1</span>.this); }
意味着将他们加入到我们控制池里面去了,然后从付款跳转到登陆,登陆跳到注册,注册跳到充值,都不要finish当前的Activity,这样点击返回就会按照流程返回了。最后我们在充值成功的时候,调用
CacheActivity.finishSingleActivityByClass(Activity2.class);
<pre name="code" class="java" style="font-size:18px;">CacheActivity.finishSingleActivityByClass(Activity3.class)
<pre name="code" class="java" style="font-size:18px;">CacheActivity.finishSingleActivityByClass(Activity4.class)
这样就会关闭后面三个Activity,第一个Activity也就是Activity1就出出来。
<span style="font-size:18px;">我们也可以不把付款的页面加入进去,只把后面三个加入进去,然后调用</span><pre name="code" class="java"><pre name="code" class="java"><span style="font-size:14px;"></span><pre name="code" class="java" style="font-size:18px;">CacheActivity.<span style="font-family: Arial, Helvetica, sans-serif;font-size:14px;">finishActivity(),全部清空,第一个页面也就出来了。</span>
<span style="font-size:18px;">大概思路和做法就是这样。不知道大家听明白没?</span>
打开多个Activity后,任意关闭其中几个、后面几个或者前面几个的解决办法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。