什么叫模板设计模式呢?个人理解就是在基类里面定义操作中算法的骨架,具体的实现交由子类。为什么要用它呢?自然是能提高开发效率嘛:一方面可以复用代码;另一方面还可以提高代码可读性。开发中最常用的就是设计一个BaseActivity和BaseFragment作为开发模板了。下面就来定义一个这样的模板.
1.定义BaseActivity类:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initBeforeView();
setContentView(getContentViewId());
ButterKnife.bind(this);
initTitle();
initView();
initData();
}
/**
*加载布局之前要做的初始化
*/
protected void initBeforeView() {
}
/**
* 初始化头部
*/
protected abstract void initTitle();
/**
* 初始化界面
*/
protected abstract void initView();
/**
* 初始化数据
*/
protected abstract void initData();
/**
* 返回当前activity所显示布局id
* @return
*/
protected abstract int getContentViewId();
/**
*查找页面布局ID所对应控件对像,不用强制转换
* @param resId
* @param <T>
* @return
*/
protected <T>T findViewByIds(int resId){
return (T)findViewById(resId);
}
/**
* 跳转activity
* @param cls
*/
protected void startActivity(Class<?> cls){
startActivity(new Intent(this,cls));
}
}
2.定义BaseFragment类:
public abstract class BaseFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initBeforView();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(getContentView(),container,false);
ButterKnife.bind(this,view);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView(view);
initData();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getBundle(getArguments());
}
/**
* view创建之前要做的初始化
*/
protected void initBeforView() {
}
/**
* 返回当前fragment的布id
* @return
*/
protected abstract int getContentView();
/**
* 初始化界面
* @param view
*/
protected abstract void initView(View view);
/**
* 初始化数据
*/
protected abstract void initData();
/**
* 获取activity传过来的数据
* @param arguments
*/
protected void getBundle(Bundle arguments) {
}
/**
* 启动activity
* @param cls
*/
protected void startActivity(Class<?> cls){
startActivity(new Intent(getContext(),cls));
}
}
3.开发中只要继承对应的基类即可