在我们平常开发中,写一个界面,继承onCreate方法,然后setContentView设置布局,一个简单的Activity界面就完成了。如果界面上的控件很多的时候,这个时候代码全部写在onCreate方法里面就显得有点lo了,而且还有点乱。有的人就想,在onCreate方法里面在分开写initView方法,initData方法等。这是个不错的选择,但是长期这样写,你不觉得累?我觉得累!接下来就推荐一款已经封装好的Base工程。来看看怎么使用吧。
Base类的介绍:
- 1.BaseApplication
- 2.BaseMainActivity*推荐
- 3.BaseActivity
- 4.BaseFragment
- 5.BaseFragmentActivity
- 6.BaseLazyLoadFragment
- 7.BaseNetActivity
- 8.BaseNetFragment
- 9.BaseNetFragmentActivity
- 10.BaseRecyclerAdapter
- 11.BaseComparable
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);