业务场景:
1、项目中有很多模块界面长的相同;为了减少工作量,我们可能需要自定义View;
2、有些模块使用的控件通用如分享弹出控件、Dialog弹出控件
3、业务复杂的模块(对扩展性要求较高):播放器、表情输入控件、图片浏览器
方案:
1、最简单的就是继承FrameLayout、RelativeLayout、LinearLayout、View来扩展功能暴露接口
2、继承Dialog、popwindow做功能
3、直接写个帮助类
如果控件的业务不复杂,对于1、3的方式总觉得有点麻烦;一个帮助类不同的方法界面实现的代码还是差不多的,只是的数据不同;如果要扩展还需要复制一份代码来改改数据
BaseViewHoldModle模板
public abstract class BaseViewHoldModle<Date> {
protected Date mDate;
protected View rootView;
//生成View
public abstract View createView(Context context);
//设置数据
public void setViewData(Date data){
this.mDate = data;
}
}
实例代码
public class SystemTipHolder extends BaseViewHoldModle<String> {
@Override
public View createView(Context context) {
rootView = View.inflate(context, R.layout.row_message_systemtip, null);//返回系统错误视图
return rootView;
}
@Override
public void setViewData(String data) {
super.setViewData(data);
TextView mTextView = (TextView)rootView.findViewById(R.id.txt_apply_cancel);
mTextView.setText(data);
}
}
SystemTipHolder mSystemTipHolder = new SystemTipHolder();
messageView = mSystemTipHolder.createView(context);
mSystemTipHolder.setViewData(context.getString(R.string.cancle_order_apply));
addView(messageView);