Android BaseActivity与BaseFragmnt的封装方法
程序员文章站
2022-05-01 17:46:18
注意了
需要使用butterknife进行初始化
baseactivity:
public abstract class activity extends appcompatactivity {...
注意了
需要使用butterknife进行初始化
baseactivity:
public abstract class activity extends appcompatactivity { protected placeholderview mplaceholderview; @override protected void oncreate(@nullable bundle savedinstancestate) { super.oncreate(savedinstancestate); // 在界面未初始化之前调用的初始化窗口 initwidows(); if (initargs(getintent().getextras())) { // 得到界面id并设置到activity界面中 int layid = getcontentlayoutid(); setcontentview(layid); initbefore(); initwidget(); initdata(); } else { finish(); } } /** * 初始化控件调用之前 */ protected void initbefore() { } /** * 初始化窗口 */ protected void initwidows() { } /** * 初始化相关参数 * * @param bundle 参数bundle * @return 如果参数正确返回true,错误返回false */ protected boolean initargs(bundle bundle) { return true; } /** * 得到当前界面的资源文件id * * @return 资源文件id */ protected abstract int getcontentlayoutid(); /** * 初始化控件 */ protected void initwidget() { butterknife.bind(this); } /** * 初始化数据 */ protected void initdata() { } @override public boolean onsupportnavigateup() { // 当点击界面导航返回时,finish当前界面 finish(); return super.onsupportnavigateup(); } @override public void onbackpressed() { // 得到当前activity下的所有fragment @suppresslint("restrictedapi") list fragments = getsupportfragmentmanager().getfragments(); // 判断是否为空 if (fragments != null && fragments.size() > 0) { for (fragment fragment : fragments) { // 判断是否为我们能够处理的fragment类型 if (fragment instanceof net.qiujuer.italker.common.app.fragment) { // 判断是否拦截了返回按钮 if (((net.qiujuer.italker.common.app.fragment) fragment).onbackpressed()) { // 如果有直接return return; } } } } super.onbackpressed(); finish(); } /** * 设置占位布局 * * @param placeholderview 继承了占位布局规范的view */ public void setplaceholderview(placeholderview placeholderview) { this.mplaceholderview = placeholderview; } }
basefragment:
public abstract class fragment extends android.support.v4.app.fragment { protected view mroot; protected unbinder mrootunbinder; protected placeholderview mplaceholderview; // 标示是否第一次初始化数据 protected boolean misfirstinitdata = true; @override public void onattach(context context) { super.onattach(context); // 初始化参数 initargs(getarguments()); } @nullable @override public view oncreateview(layoutinflater inflater, @nullable viewgroup container, @nullable bundle savedinstancestate) { if (mroot == null) { int layid = getcontentlayoutid(); // 初始化当前的跟布局,但是不在创建时就添加到container里边 view root = inflater.inflate(layid, container, false); initwidget(root); mroot = root; } else { if (mroot.getparent() != null) { // 把当前root从其父控件中移除 ((viewgroup) mroot.getparent()).removeview(mroot); } } return mroot; } @override public void onviewcreated(view view, @nullable bundle savedinstancestate) { super.onviewcreated(view, savedinstancestate); if (misfirstinitdata) { // 触发一次以后就不会触发 misfirstinitdata = false; // 触发 onfirstinit(); } // 当view创建完成后初始化数据 initdata(); } /** * 初始化相关参数 */ protected void initargs(bundle bundle) { } /** * 得到当前界面的资源文件id * * @return 资源文件id */ @layoutres protected abstract int getcontentlayoutid(); /** * 初始化控件 */ protected void initwidget(view root) { mrootunbinder = butterknife.bind(this, root); } /** * 初始化数据 */ protected void initdata() { } /** * 当首次初始化数据的时候会调用的方法 */ protected void onfirstinit() { } /** * 返回按键触发时调用 * * @return 返回true代表我已处理返回逻辑,activity不用自己finish。 * 返回false代表我没有处理逻辑,activity自己走自己的逻辑 */ public boolean onbackpressed() { return false; } /** * 设置占位布局 * * @param placeholderview 继承了占位布局规范的view */ public void setplaceholderview(placeholderview placeholderview) { this.mplaceholderview = placeholderview; } }
placeholderview:
/** * 基础的占位布局接口定义 * */ public interface placeholderview { /** * 没有数据 * 显示空布局,隐藏当前数据布局 */ void triggerempty(); /** * 网络错误 * 显示一个网络错误的图标 */ void triggerneterror(); /** * 加载错误,并显示错误信息 * * @param strres 错误信息 */ void triggererror(@stringres int strres); /** * 显示正在加载的状态 */ void triggerloading(); /** * 数据加载成功, * 调用该方法时应该隐藏当前占位布局 */ void triggerok(); /** * 该方法如果传入的isok为true则为成功状态, * 此时隐藏布局,反之显示空数据布局 * * @param isok 是否加载成功数据 */ void triggerokorempty(boolean isok); }
推荐阅读
-
Android实现计时与倒计时的常用方法小结
-
Android WebView的使用方法及与JS 相互调用
-
Android ListView与ScrollView冲突的解决方法总结
-
android图片文件的路径地址与Uri的相互转换方法
-
Android实现计时与倒计时的方法汇总
-
基于linux与windows平台下 如何下载android sdk源代码的方法详解
-
解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
-
Android中TextView文本高亮和点击行为的封装方法
-
Android中Json数据读取与创建的方法
-
Android将Glide动态加载不同大小的图片切圆角与圆形的方法