点滴记录 -- 自定义Activity栈 之 如何出栈
来源:互联网 发布:淘宝商家编码在哪 编辑:程序博客网 时间:2024/06/05 15:41
自定义Activity栈
首先自定义一个 ActivityManage
第一种 ActivityManage
感谢 http://www.360doc.com/content/14/0916/15/16319846_409925799.shtml public class ScreenManager { private static Stack<Activity> activityStack; private static ScreenManager instance; private ScreenManager() { } public static ScreenManager getScreenManager() { if (instance == null) { instance = new ScreenManager(); } return instance; } public static void popActivity() { Activity activity = activityStack.lastElement(); if (activity != null) { activity.finish(); activity = null; } } // 退出栈顶Activity public void popActivity(Activity activity) { if (activity != null) { activity.finish(); activityStack.remove(activity); activity = null; } } // 获得当前栈顶Activity public Activity currentActivity() { Activity activity = activityStack.lastElement(); return activity; } // 将当前Activity推入栈中 public static void pushActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); } // 退出栈中所有Activity public void popAllActivityExceptOne(Class cls) { while (true) { Activity activity = currentActivity(); if (activity == null) { break; } if (activity.getClass().equals(cls)) { break; } popActivity(activity); } } }
第二种 ActivityManage
感谢好友 开发-北京-噢耶public class AppManager { private static Stack<Activity> activityStack; private static AppManager instance; private AppManager() { } /** * 单一实例 */ public static AppManager getAppManager() { if (instance == null) { instance = new AppManager(); } return instance; } /** * 添加Activity到堆中 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); } /** * 获取当前Activity(堆栈中压入的) */ public Activity currentActivity() { Activity activity = activityStack.lastElement(); return activity; } /** * 根据字节码找到对应的Activity实例 * * @param cls * @return */ public Activity getActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { return activity; } } return null; } /** * 结束当前Activity(堆栈中�?���?��压入的) */ public void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } /** * 结束指定类名的Activity */ public void finishActivity(Class<?> cls) {// for (Activity activity : activityStack) {// if (activity.getClass().equals(cls)) {// finishActivity(activity);// }// } Iterator<Activity> itr = activityStack.iterator(); while(itr.hasNext()){ Activity activity = itr.next(); if(activity.getClass().equals(cls)){ itr.remove(); activity.finish(); activity = null; } } } /** * 结束所有的Activity */ public void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i) && !activityStack.get(i).isFinishing()) { activityStack.get(i).finish(); } } activityStack.clear(); System.exit(0); }}
第三种 ActivityManage
public class FQYActivityManage { private static FQYActivityManage manage; private static Stack<Activity> activityStack; private FQYActivityManage() { } /** * 得到一个 FQYActivityManage 对象 * * @return */ public static FQYActivityManage getFQYActivityManage() { // 保证只有一个 FQYActivityManage对象 if (manage == null) { manage = new FQYActivityManage(); } return manage; } /** * 获得当前栈顶的activity * * @return */ public Activity getCurrentStackTopActivity() { Activity activity = null; if (!activityStack.empty()) { activity = activityStack.lastElement(); } return activity; } /** * 将新的activity 压栈 * * @param activity */ public void pushActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); FQYLogUtils.e("push入栈 " + activity.toString()); } /** * 退出栈顶 activity */ public void pullActivity() { Activity lastElement = null; if (!activityStack.empty()) { lastElement = activityStack.lastElement(); FQYLogUtils.e("pull出栈 " + lastElement.toString()); lastElement.finish(); activityStack.remove(lastElement); } } /** * 关闭应用程序 */ public void pullAllActivity() { int size = activityStack.size(); for (int i = 0; i < size; i++) { pullActivity(); size--; } }}
第三种是我自己写的,这里以第三种为例继续下文,先来段题外话,网上好多第一种,但是我对popAllActivityExceptOne 很困惑,注释写的是“退出栈中所有Activity”,但是方法名(popAllActivityExceptOne)和 方法体都是保留一个指定的activity,不明白这样做的目的和用法,求指点
言归正传 ,继续主题。
重写一个Application
主要是为了方便管理activityManage(我是这么理解的,不对请指正)
public class FQYApplication extends Application { protected FQYActivityManage activityManage; @Override public void onCreate() { super.onCreate(); activityManage = FQYActivityManage.getFQYActivityManage(); } public FQYActivityManage getActivityManage() { return activityManage; } public void setActivityManage(FQYActivityManage activityManage) { this.activityManage = activityManage; }}
写一个baseActivity 或者 直接使用
看看baseactivity
public class BaseActivity extends FragmentActivity { protected Context baseContext; protected FQYActivityManage activityManage; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); baseContext = this; // 去除标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); activityManage = ((FQYApplication) this.getApplication()) .getActivityManage(); activityManage.pushActivity(this); } @Override protected void onDestroy() { super.onDestroy(); } @Override public void onBackPressed() { super.onBackPressed(); }}
Ps: 不要在baseactivity 中执行出栈,想知道为什么?你可以试验一下。
接下来就是如何出栈了
出栈在baseactivity 的子类中执行 ,子类有FQYActivityManage的对象 activityManage(baseactivity 中 protected FQYActivityManage activityManage; ),只须在需要出栈的地方 activityManage.pullActivity();
就可以了,相信直接使用你也会了吧?
0 0
- 点滴记录 -- 自定义Activity栈 之 如何出栈
- 记录无聊之点滴
- 实习之点滴记录
- 记录点滴之优化应用性能:Activity里面不要使用静态常量
- QMetaObject之invokeMethod 点滴记录
- 博客之旅,记录点滴
- android-点滴记录-检查自己手机是否出了问题
- 【点滴记录】如何设置outlook的代理
- 如何自定义Activity
- Linux 点滴之init.s片段解析(个人点滴记录)
- 自定义Activity栈 管理Activity--ArrayList
- 点滴记录之-android制作boot.img
- 点滴记录之-android默认时区设置
- 点滴记录:我的编程之路
- Android之ViewPager源码分析 点滴记录
- iOS之Xcode设置点滴记录(一)
- iOS之Xcode设置点滴记录(二)
- 开始博客之旅,记录工作点滴!
- 急救常识3-窒息--气道异物梗阻
- 央视:今年前四个月全国人均从A股获利1.4万元
- hiho一下 第四十七周——拓扑排序
- 相机标定
- 大数加法和乘法
- 点滴记录 -- 自定义Activity栈 之 如何出栈
- 全国最大盗销文物案告破 涉案文物价值逾5亿元
- 算法导论 (一)归并排序实现 c++
- Winform控件之菜单控件,工具栏控件和状态栏控件
- 整理一个Apache Shiro 使用手册 好文章
- 用户级线程和内核级线程
- iOS之UIImage详情
- mysql命令
- Word中解决图片失真的办法