当一个界面中的试图太过于复杂的时候 ,可以将它分成一个一个的holder,每一个模块放在一个holder中,这样使界面里的代码复杂度降低,还可以让每一个模块的开发者独立完成,解耦和。
继承baseholder 在activity、fragment等中new一个子类holder然后addView
package com.hongji.kcj_mi.holder.base;
import android.content.Context;
import android.util.SparseArray;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
/**
* 创建出他的子类 然后addView的形式添加到framelayout中即可
* Created by xk on 2016/8/15 21:28.
*/
public abstract class BaseHolder {
protected View rootView;
protected Context context;
private SparseArray<View> views;
public BaseHolder(Context context){
this.context=context;
views=new SparseArray<View>();
init();
initView();
initData();
}
/**
* 在这里完成初始化操作,在布局没有实例完之前的初始化
*/
protected abstract void init();
/**
* 在这里实例化布局相关的组件
*/
protected abstract void initView();
/**
* 在这里为相应的组件添加事件,初始化状态,或者联网请求数据
*/
protected abstract void initData();
/**
* 得到该holder维护的view
* @return view的根布局
*/
public View getRootView(){
return rootView;
}
public TextView getTextView(int viewId) {
return retrieveView(viewId);
}
public Button getButton(int viewId) {
return retrieveView(viewId);
}
public ImageView getImageView(int viewId) {
return retrieveView(viewId);
}
public View getView(int viewId) {
return retrieveView(viewId);
}
/**
* 根据id检索view
* @param viewId
* @param <T>
* @return
*/
protected <T extends View> T retrieveView(int viewId) {
View view = views.get(viewId);
if (view == null) {
view = rootView.findViewById(viewId);
views.put(viewId, view);
}
return (T) view;
}
}