android baseactivity 网络封装,Android BaseActivity与BaseFragmnt的封装方法

注意了

需要使用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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值