这里从头开始设计一个简单的BaseActivity
虽然是简单的版本,但是目的都是一样的,都是为了让开发更加容易。
本项目没有使用架构,为的是让新手能从,一般的流程开始学期,能更好的理解如何开发一个简单的Android应用。
一般Activity会保存一个Context对象mContext。这个变量名属于约定。建议使用这个。
一般情况下一个Activity的流程会有2个方法.这里使用abstract确保每个子类的处理都是一样的。
/**
* 初始化视图
*/
protected abstract void initView() ;
/**
* 业务逻辑
*/
public abstract void initData();
这里为了方便引用布局,封装了一个获取布局id的方法,子类直接通过该方法返回布局。
在Activity里面会有很多页面的跳转。这里简单封装了两个跳转方法,一个是不传值 一个是传值的。
这里只是简单的写了几个方法而已,前期可以简单封装一下,后期可以根据具体项目需求,添加功能。这里正常会封装一个Activity管理类,但是为了让项目尽量的保持简洁,一切都是去掉了。
下面给出第一个最简单的封装类
package com.iscoding.demo.zhihu.base;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
public abstract class BaseActivity extends AppCompatActivity {
protected Context mContext;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
//设置布局 绑定布局
setContentView(getLayoutId());
initView();
initData();
}
/**
* 加载Layout
*/
protected abstract int getLayoutId();
/**
* 初始化视图
*/
protected abstract void initView() ;
/**
* 业务逻辑
*/
public abstract void initData();
public void openActivity(Class<?> cls) {
Intent i = new Intent(this, cls);
startActivity(i);
}
protected void openActivity(Class<?> cls, String key, String value) {
Intent intent = new Intent(this, cls);
intent.putExtra(key, value);
startActivity(intent);
}
}
封装好后,其他的Activity会直接使用里面的方法。
这里把Fragment的代码也封装好 ,直接写出来
package com.iscoding.demo.zhihu.base;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
- 类功能:封装好的BaseFragment
- 公司:IsCoding工作室
- 作者:IsCoding
- 邮箱:iscoding@126.com QQ:1400100300
- 时间:2016/10/29 0029 14:05
*/
public abstract class BaseFragment extends Fragment {
protected Context mContext;
protected View rootView;// 缓存Fragment view
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
}
/**
* 很多时候onCreateView会被调用,比如页面切换,如果已经初始化过的页面会重新初始化
* 此处代码是为了实现程序复用添加的,避免重复调用onCreateView每次都要重新初始化控件
* 此处代码直接封装好,子类直接使用initView就可以
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (rootView == null) {
// 初始化整体布局pull_list
rootView = inflater.inflate(getLayoutId(), container, false);
} else {
ViewGroup parent = (ViewGroup) rootView.getParent();
if (parent != null) {
parent.removeView(rootView);
}
}
return rootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView();
initData();
}
protected abstract int getLayoutId();
protected abstract void initView();
protected abstract void initData();
//Base类一般会封装一些常用方法,方便子类继承和调用,共性的东西可以添加在这个位置
public void openActivity(Class<?> pClass) {
Intent intent = new Intent(mContext, pClass);
startActivity(intent);
}
// Base类一般会封装一些常用方法,方便子类继承和调用,共性的东西可以添加在这个位置
public void openActivity(Class<?> pClass, String name, String value) {
Intent intent = new Intent(mContext, pClass);
intent.putExtra(name, value);
startActivity(intent);
}
}