Android 简单封装的例子

来源:互联网 发布:mac safari 无法关闭 编辑:程序博客网 时间:2024/05/01 05:20

Android中简单的封装。

本节是我第一次写博客,希望不对的地方大家指点指点,今后会陆续更新一些新的知识点,希望可以给初学者带去一些帮助。

/不喜欢废话,直接上干货/

1、什么是封装:
网上定义很多,这里我就按我的理解去说这样好理解:
封装就是将一些繁琐的代码或者是方法(而这些方法和代码后面又经常用为了偷懒),写在一个方法里,这样我们在用的时候就不用重复的去写一些繁琐但是又不得不写的代码。直接调用方法就可以了。
2、封装的好处:
重复的去利用代码,不用在用的时候再去写繁琐的代码,只需要调用方法就可以了。


干货:

普通干货(先来一个简单的)
为什么要写:在Activity中实例化控件的时候我们都要创建一个方法叫做initView();将我们的控件实例化都放在这个方法里面,最后在Activity的onCreate中去调用,如果activity很多,那么每次实例化都要创建这个方法,都要在Activity的onCreate中去调用(是不是觉得很烦?),能不能将实例化控件的这个方法给封装起来?这样我们在activity中就再也不用自己去写这个方法并且不用在onCreate中去调用了,(嘿嘿这样多爽啊)
下面告诉大家怎么去写:
1、首先我们要写一个接口:BaseInterface将我们经常要写的方法(如initView())写在里面,如图:
这里写图片描述
这里写图片描述
2、在写一个抽象(abstract)的基类CommonActivity 去继承 Activity的同时要实现我们的BaseInterface,重写onCreate方法(注意上面的@Override去掉了),这里要注意我们需要将我们的窗体传过来,所以要在onCreate的参数中添加@LayoutRes int layoutResId。
在onCreate中调用两个方法:setContentView(layoutResId) ,this.initView();一个是接口中的,一个是加载布局的。如下:
这里写图片描述
3、让我们所有的Activity都去继承我们的BaseActivity这样我们的Activity都会去实现initView的方法,只要将空间的实例化放到initView方法中就可以了,(注意Activity中的setContentView都可以不要了,直接写在:super.onCreate();中):
如下图:
这里写图片描述

稍微高档点的干货
其实原理都是一样的我就不想第一个一样一一解释了,
直接贴代码上干货:

接口

public interface BaseInterface {
void initBoot();
void initViews();
void initData(Bundle var1);
void initEvents();
}

基类

public abstract class CommonActivity extends Activity implements BaseInterface {
public Activity activity;

/** * 声明一个空的构造方法 */public CommonActivity() {}protected void onCreate(Bundle savedInstanceState, @LayoutRes int layoutResID) {    super.onCreate(savedInstanceState);    setContentView(layoutResID);//加载窗体    this.activity = this;//给activity赋值    /*下面的都是借口中的方法   (接口中的方法可以不去实现,只要在主函数中调用就可以了) */    this.initBoot();    this.initData(this.getIntent().getExtras());    this.initViews();    this.initEvents();}/** * 简化findViewById */public <T extends View> T findView(int id) {    return (T) this.findViewById(id);}

// ============================================================

/** * 简化Toast的写法 */public void showToast(String msg) {    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();}

// ========================================================================

/** * 简化判断为空 */public boolean isEmpty(Object obj) {    return null == obj;}/** * 简化判断不为空 */public boolean isNotEmpty(Object obj) {    return null != obj;}/** * 窗体跳转 */public void startActivity(Class<?> clazz) {    this.startActivity(clazz, (Bundle) null, 0);}public void startActivity(Class<?> clazz, Bundle bundle) {    this.startActivity(clazz, bundle, 0);}public void startActivity(Class<?> clazz, int requestCode) {    this.startActivity(clazz, (Bundle) null, requestCode);}//    真正的跳转是在这里,上面都是方法重载public void startActivity(Class<?> clazz, Bundle bundle, int requestCode) {    Intent intent = new Intent(this, clazz);    if (bundle != null) {        intent.putExtras(bundle);    }    if (requestCode == 0) {        this.startActivity(intent);    } else {        this.startActivityForResult(intent, requestCode);    }};/** * 打印输出 */public void println(Serializable s) {    System.out.println(s);}

}

主窗体

public class MainActivity extends CommonActivity {

private Button btn_test;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState, R.layout.activity_main);}@Overridepublic void initBoot() {}@Overridepublic void initViews() {    btn_test = findView(R.id.btn_test);}@Overridepublic void initData(Bundle var1) {}@Overridepublic void initEvents() {}

}

注意在CommonActivity中的方法都是可以直接用的。
有兴趣的可以自己尝试着去封装更多的方法。。

最后希望和大家一起进步。。。。

3 0
原创粉丝点击