Android之Activity框架

在安卓应用中,经常需要Activity中经常需要有大量相似的Activity类,这些类往往有相似的结构与功能,因此产生了大量重复代码,为此,以下提供一种方法有效的降低了代码冗余。

定义Activity工具类

 *      应用程序Activity管理类:用于Activity管理和应用程序退出* 修订历史 :* * ============================================================**/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(堆栈中最后一个压入的)*/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);}}}/*** 结束所有Activity*/public void finishAllActivity(){for (int i = 0, size = activityStack.size(); i < size; i++){if (null != activityStack.get(i)){activityStack.get(i).finish();}}activityStack.clear();}/*** 退出应用程序*/public void AppExit(Context context) {try {finishAllActivity();ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);activityMgr.restartPackage(context.getPackageName());System.exit(0);android.os.Process.killProcess(android.os.Process.myPid());} catch (Exception e) { }}
}

定义Activity基类

public abstract class BaseActivity extends Activity implements OnClickListener {/*** Android生命周期回调方法-创建*/@Overridepublic void onCreate(Bundle paramBundle) {super.onCreate(paramBundle);// 设置没有标题// requestWindowFeature(Window.FEATURE_NO_TITLE);mContext = this;app = (AmbowApplication) getApplication();AppManager.getAppManager().addActivity(this);initView();}/*** Android生命周期回调方法-销毁*/@Overrideprotected void onDestroy() {AppManager.getAppManager().finishActivity(this);super.onDestroy();}@Overrideprotected void onResume() {super.onResume();overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);}@Overrideprotected void onPause() {super.onPause();}/*** 初始化界面*/private void initView() {loadViewLayout();findViewById();processLogic();setListener();}/*** find控件*/protected abstract void findViewById();/*** 加载布局*/protected abstract void loadViewLayout();/*** 后台获取数据*/protected abstract void processLogic();/*** 设置监听*/protected abstract void setListener();

将获取布局,获取View,获取后台数据,设置监听设置为抽象方法,使得子类继承时必须要实现。

子类对抽象方法的实现

    @Overrideprotected void findViewById() {newsLv = (ListView) this.findViewById(R.id.news_lv);gallery = (MyGallery) galleryView.findViewById(R.id.gallery);galleryRl = (RelativeLayout) galleryView.findViewById(R.id.rl_gallery);bannerTv = (TextView) galleryView.findViewById(R.id.banner_tv);addMoreBtn = (TextView) addMoreView.findViewById(R.id.btn_add_more);}@Overrideprotected void loadViewLayout() {setContentView(R.layout.news_list_layout);galleryView = View.inflate(mContext, R.layout.gallery_layout, null);addMoreView = View.inflate(mContext, R.layout.add_more, null);setTitleBarView(false, "资讯", -1, true);}@Overrideprotected void processLogic() {newsLv.addHeaderView(galleryView);eduNewsList = new ArrayList<NewsListEntity.News>();newsLv.addFooterView(addMoreView);
//      getTopNewsData();}@Overrideprotected void setListener() {addMoreBtn.setOnClickListener(this);newsLv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {Intent detailIntent = new Intent(mContext,NewsDetailActivity.class);if (eduNewsList.size() > arg2 - 1) {detailIntent.putExtra("id", eduNewsList.get(arg2 - 1).Id);startActivity(detailIntent);}}});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ-1260 Pearls DP

题目链接&#xff1a;http://poj.org/problem?id1260 基本DP&#xff0c;只要证明最优解中不会有交叉替换&#xff0c;得出转移方程&#xff1a;f[i]min{f[j](a[j1]..a[i]10)*p[i]}。由(ai10)*bi(aj10)*bj(aiaj10)*bj > (ai10)*biai*bj 替换> t*biai*bj 可证。 1 …

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 15丨用户购买平台【难度困难】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

量子通信产业化初试,中国筹建千亿级国家实验室

来源&#xff1a;第一财经摘要&#xff1a;一个涉及多地的量子信息科学国家实验室&#xff08;下称“国家实验室”&#xff09;正在筹建&#xff0c;长期投资将达千亿元。第一财经从2018年国际量子密码会议上了解到&#xff0c;中国正在筹建的国家实验室涉及合肥、上海和北京等…

Android之自定义控件入门

本文主要讲述了实现安卓button点击变色与利用ViewPager实现图片自动轮播效果 我伞可以看到在很多应用中&#xff0c;安卓按钮按下时与正常时状态是不同的&#xff0c;这种效果也很容易达到。 第一步&#xff1a;创建XML文件定义不同事件的不同效果 <?xml version"1…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 16丨报告的记录 II【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

iOSUIImage变为NSData并进行压缩

//sdk中提供了方法可以直接调用 UIImage *img [UIImage imageNamed:"some.png"]; NSData *dataObj UIImageJPEGRepresentation(img, 1.0); //下面是sdk中UIImage.h头文件中的内容 UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image); // return im…

理性解读中国科技实力:不震惊式吹捧,也不全盘抹杀

来源&#xff1a;风云之声&#xff08;ID:fyvoice&#xff09;关于中国科技成果&#xff0c;大家一直都在讨论&#xff0c;网上也有很多评论文章。有的&#xff0c;把中国科技实力吹上天&#xff1b;有的&#xff0c;则干脆贬入地。中国在很多领域确实做得不错&#xff0c;与此…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 16丨市场分析 II【难度困难】​

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

android之常用知识点(一)

本文主要包括安卓一些常用的知识点 android常用的四种响应按钮点击事件的方法android动态刷新界面android常用的listView用法android常用的handler的用法 android常用的四种响应按钮点击事件的方法有 1.内部类 2.匿名内部类 3.布局文件夹定义Onclick属性,并在activity中声…

Unity(四):使用场景Ⅰ:建立类型映射

在之前的一篇文章“Unity(三)&#xff1a;快速入门”中&#xff0c;给出了一个简单的示例&#xff0c;让我们对Unity有一个感性的认识。但是&#xff0c;Unity到底是做什么用的呢&#xff1f;一个简单示例并不能解答这个问题。 总的来看&#xff0c;Unity的使用场景主要有以下几…

科技创新2030---“新一代人工智能”重大项目2018年度项目申报指南征稿

来源&#xff1a;财政资金申请摘要&#xff1a; “新一代人工智能”重大项目的凝练布局和任务部署已经战略咨询与综合评审特邀委员会咨询评议&#xff0c;并报国务院批准实施。根据《国务院关于改进加强中央财政科研项目和资金管理的若干意见》&#xff08;国发〔2014〕11号&…

一旦上云,欲罢不能,带大家薅一薅“云羊毛”

一旦上云&#xff0c;欲罢不能。相对于传统服务器&#xff0c;云服务器因为不需要去拉网线、搭机房、交电费等等问题&#xff0c;云服务器提供商往往会提供一整套完整的解决方案&#xff0c;帮助企业和个人用户&#xff0c;快速实现业务部署。 近年来&#xff0c;各大厂也在积…

Android之自定义控件深入

本文主要讲述两个知识点:popwindow的使用和通过继承View实现一个自定义控件&#xff0c;实现点击&#xff0c;手动按钮的效果. popwindow的使用 //定义 popupWindowpopWin new PopupWindow(MainActivity.this);popWin.setWidth(input.getWidth()); //设置宽度popWin.setHeig…

这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。...

这个题目面试的时候&#xff0c;用的是最简单&#xff0c;但多开辟内存的方法&#xff0c;后来自己想想&#xff0c;在原数组进行操作的方法&#xff1a; private static string GreaterLeftLessRight(string str, char c){char[] array str.ToCharArray();int comparingIndex…

麒麟芯片AI首席科学家,解读AI芯片如何让手机更智能

来源&#xff1a;华为摘要&#xff1a;8月31日&#xff0c;华为发布了新一代顶级人工智能手机芯片——麒麟980&#xff0c;成为全球首款采用7nm制程工艺的手机芯片。麒麟980能做到人脸识别、物体识别、物体检测、图像分割、智能翻译等&#xff0c;实现AI识别质的飞跃。今天&…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 I【难度简单】​

【未来的你&#xff0c;会感谢今天努力的你】每日两题&#xff0c;一难一易&#xff0c;每天进步一点点&#xff0c;可能会直接导致一场面试的成功&#xff0c;或工作的轻松搞定&#xff0c;从而升职加薪迎娶白富美&#xff0c;加油小伙伴&#xff01; &#x1f345;举办场地&a…

协议森林14 逆袭 (CIDR与NAT)

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 严禁任何形式转载。 IPv4由于最初的设计原因&#xff0c;长度只有32位&#xff0c;所以只提供了大约40亿个地址。这造成了IPv4地址的耗尽危机。随后&#xff0c;IPv6被设计出来&#xff0c;并可以提供足够…

认知神经科学:美陆军高度关注的人工智能与生物科技的交叉学科领域

来源&#xff1a;天大神经工程近年来&#xff0c;随着“第三次抵消战略”的深入推进&#xff0c;美军重点部署人工智能、生物科技等前沿技术领域发展&#xff0c;寻求获取新的领先优势。作为人工智能与生物科技的交叉学科领域&#xff0c;认知神经科学具有颠覆未来作战样式的巨…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 II【难度中等】​

【未来的你&#xff0c;会感谢今天努力的你】每日两题&#xff0c;一难一易&#xff0c;每天进步一点点&#xff0c;可能会直接导致一场面试的成功&#xff0c;或工作的轻松搞定&#xff0c;从而升职加薪迎娶白富美&#xff0c;加油小伙伴&#xff01; &#x1f345;举办场地&a…

Android之自定义属性

安卓自定义属性主要有3个步骤 在values文件夹新建attrs.xml文件中声明属性&#xff0c;包括属性名和格式&#xff0c;format常用属性有string ,integer,reference等 <?xml version"1.0" encoding"utf-8"?> <resources><!-- 声明属性集…