推荐一款对Activity的封装

在我们平常开发中,写一个界面,继承onCreate方法,然后setContentView设置布局,一个简单的Activity界面就完成了。如果界面上的控件很多的时候,这个时候代码全部写在onCreate方法里面就显得有点lo了,而且还有点乱。有的人就想,在onCreate方法里面在分开写initView方法,initData方法等。这是个不错的选择,但是长期这样写,你不觉得累?我觉得累!接下来就推荐一款已经封装好的Base工程。来看看怎么使用吧。

github地址:

Base类的介绍:

1.BaseApplication.java

public class TestApplication extends BaseAppLication {
    /**
     * 有使用BaseNetActivity,带有Net的Base封装,要继承此类
     * 有使用Xutils3的相关的,非必须继承BaseAppLication,否则会出现应用崩溃现象
     * 如果使用了Xutils3,不想继承此类,记得自己初始化Xutils3
     */
    @Override
    protected void init() {
        //初始化自己需要的逻辑
//        BaseConfig.setBaiDuStatistics(false);//是否需要百度统计,默认false
//        BaseConfig.setLog(true);//是否需要打印出日志,默认true
//        DBManager.initDB();//初始化数据库
    }
}

2.BaseMainActivity.java

市面上大部分APP都少不了底部Tab栏,还在为来回切换,设置布局等烦恼?直接继承此类三个方法搞定你想要的效果!
三个方法:
1.selectImags();//设置选中图标,返回:图标数组
2.unSelectImags();//设置未选中图标 返回:图标数组
3.setFragments();//设置模块 返回:List<Fragment>
//附带父类的一个方法,避免满足不了需求
4.initData(Context mContext);//做自己需要处理的逻辑
例子:
    @Override
    public void initData(Context mContext) {
        //这里做自己的逻辑处理等
    }
    //设置选中图标
    @Override
    public int[] selectImags() {
        int[] imgsHovers = {
                R.mipmap.ic_home_actionbar_select0,
                R.mipmap.ic_home_actionbar_select1,
                R.mipmap.ic_home_actionbar_select2,
                R.mipmap.ic_home_actionbar_select3,
                R.mipmap.ic_home_actionbar_select4};
        return imgsHovers;
    }
    //设置未选中图标
    @Override
    public int[] unSelectImags() {
        int[] imageNormals = {
                R.mipmap.ic_home_actionbar0,
                R.mipmap.ic_home_actionbar1,
                R.mipmap.ic_home_actionbar2,
                R.mipmap.ic_home_actionbar3,
                R.mipmap.ic_home_actionbar4};
        return imageNormals;
    }
    //设置要绑定的模块
    @Override
    public List<Fragment> setFragments() {
        return getListFragments();
    }

注意:请保持选中,未选中,模块集合的size保持一致,以免出现异常。

这里贴上一张效果图: 效果图

3.BaseActivity.java 此类继承至Activity,实现5个方法就可以玩转。<br>

1.bindLayout();//绑定布局
2.initView(View view); //初始化控件
3.initListener(); //绑定监听事件
4.initData(Context mContext);//绑定,设置数据
5.widgetClick(View v);//点击事件的逻辑处理
另外还有一些小方法及属性:
1.toBack(View v);//只需要在布局xml文件中设置onClick="toBack"就行。
2.hideSoftInput();//隐藏软件盘
3.showInputMethod;//显示软键盘
4.showToast(String msg);//吐司
5.showLog(int level,String msg);打印日志
属性:(一定要在绑定布局之前调用,否则无效)
setSetActionBarColor(true,R.color.colorPrimary);//设置状态栏颜色
setScreenRoate(false);//是否允许屏幕旋转
setSteepStatusBar(true);//是否设置沉浸状态栏
setAllowFullScreen(true);//是否允许全屏
如:
    @Override
    public int bindLayout() {//绑定布局
        setSetActionBarColor(true,R.color.colorPrimary);//设置状态栏颜色
        setScreenRoate(false);//是否允许屏幕旋转
        setSteepStatusBar(true);//是否设置沉浸状态栏
        setAllowFullScreen(true);//是否允许全屏
        return R.layout.activity_main;
    }

4.BaseFragment.java 此类继承至Fragment,实现4个方法就可以玩转。<br>

1.bindLayout();//绑定布局
2.initView(View view); //初始化控件
3.initData(Context mContext);//绑定,设置数据
4.widgetClick(View v);//点击事件的逻辑处理
保留了吐司和打印日志等方法:
1.showToast(String msg);//吐司
2.showLog(int level,String msg);打印日志

5.BaseFragmentActivity.java 此类继承至FragmentActivity,BaseActivity有的方法,属性。此类都有。这里就不做多的介绍了。

<h4 id="6">6.BaseLazyLoadFragment.java</h4> 此类继承至Fragment,实现4个方法就可以玩转,但是和BaseFragment唯一的区别就是,继承此类能实现延时加载,也就是可见的时候才去加载数据<br> 使用如下:

public class TestBaseLazyLoadFragment extends BaseLazyLoadFragment {
    /** 标志位,标志已经初始化完成 */
    private boolean isPrepared;
    /** 是否已被加载过一次,第二次就不再去请求数据了 */
    private boolean mHasLoadedOnce;
    @Override
    public int bindLayout() {//绑定布局
        return 0;
    }
    @Override
    protected void initView() {
        //初始化控件
        isPrepared=true;
    }
    @Override
    protected void initData() {
        if(!isVisible || !isPrepared || mHasLoadedOnce){
            return;
        }
        mHasLoadedOnce = true;//标识已经加载过
        //绑定数据
    }

    @Override
    public void widgetClick(View v) {
        //点击事件的逻辑处理
    }
}

7.BaseNetActivity.java 此类继承至BaseActivity,在基础上增加了三个方法用作网络请求,增加的三个方法使用如下:

    @Override
    public Params setParams() {
        //初始化网络请求参数
        Map<String,String> map = new HashMap<String, String>();
        map.put("type","1");
        Params params = new Params("https://...",null);
        //params.setClazz(String.class);//要解析的数据类型,也可以是实体类
        //params.setList(true);//解析的结果是否是List数据集合类型,默认false
        //params.setLoad(true);//是否是加载更多请求,默认false
        //params.setRefresh(true);//是否是刷新请求,默认false
        //注意:如果不需要解析,params.setClazz(null)即可,
        // 最后返回的数据为String,JSON原始数据,需要自己去解析
        return params;
    }
    @Override
    public void onNetResult (Params params) {
        //网络请求结果回调,结果值在params.getObj(),
    }
    @Override
    public void onNetError(String error) {
        //网络请求错误回调,错误信息:error
    }

8.BaseNetFragment.java 此类继承至BaseFragment,和BaseNetActivity一样,增加了三个方法,这里就不介绍了。 9.BaseNetFragmentActivity.java 此类继承至BaseFragmentActivity,和BaseNetActivity一样,增加了三个方法,这里就不介绍了。 10.BaseRecyclerAdapter.java 此类对RecyclerView的适配器进行了封装,使用如下:

 //mContext:上下文,mLists:数据集合,参数3:item布局
 adapter = new BaseRecyclerAdapter<String>(mContext,mLists,R.layout.recycler_view_item_layout) {
   @Override
   public void convert(BaseRecyclerHolder holder, String item, int position) {
       holder.setText(R.id.item_data,item+"");//设置数据
   }
 };
 recycler.setAdapter(adapter);

11.BaseComparable.java 此类是对实体类进行排序封装,排序规则,自己设定,使用如下:

    public class Age extends BaseComparable{
        int type = 1;
        int age;
        String time;

        public Age(int age,String time){
            this.age = age;
            this.time=time;
        }
        @Override
        public int compare(Object o) {
            Age o1 = (Age)o;
            int o2 = this.age;
            if(type==0){
                return o2-o1.age;
            }else {
                //时间比较
                Date data1 = TimeUtils.stringToDate(o1.time,"yyyy-MM-dd HH:mm:ss");
                Date data2 = TimeUtils.stringToDate(this.time,"yyyy-MM-dd HH:mm:ss");
                return data1.compareTo(data2);
            }
        }
    }
  //需要排序的地方调用这行代码即可
  Collections.sort(list);

转载于:https://my.oschina.net/u/3820497/blog/1997793

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值