首先第一步:我们看下我们一般情况下我们的BaseAdapter的使用
public class ProductAdapter extends BaseAdapter {
private List<Product> productList;
public ProductAdapter(List<Product> productList) {
this.productList = productList;
}
@Override
public int getCount() {
return productList == null ? 0 : productList.size() + 1;
}
@Override
public Object getItem(int position) {
return productList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//将具体的集合数据装配到具体的一个item layout中。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.e("TAG", "parent = " + parent.getClass().toString());
Log.e("TAG", "parent.getContext() = " + parent.getContext());
int itemViewType = getItemViewType(position);
if(itemViewType == 0){
TextView tv = new TextView(parent.getContext());
tv.setText("与子同行,奈何覆舟");
tv.setTextColor(UIUtils.getColor(R.color.text_progress));
tv.setTextSize(UIUtils.dp2px(20));
return tv;
}
if(position > 3){
position--;
}
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item_product_list, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//装配数据
Product product = productList.get(position);
holder.pMinnum.setText(product.memberNum);
holder.pMinzouzi.setText(product.minTouMoney);
holder.pMoney.setText(product.money);
holder.pName.setText(product.name);
holder.pProgresss.setProgress(Integer.parseInt(product.progress));
holder.pSuodingdays.setText(product.suodingDays);
holder.pYearlv.setText(product.yearRate);
return convertView;
}
//不同的position位置上,显示的具体的item的type值
@Override
public int getItemViewType(int position) {
if(position == 3){
return 0;
}else{
return 1;
}
}
//返回不同类型的item的个数
@Override
public int getViewTypeCount() {
return 2;
}
static class ViewHolder {
@BindView(R.id.p_name)
TextView pName;
@BindView(R.id.p_money)
TextView pMoney;
@BindView(R.id.p_yearlv)
TextView pYearlv;
@BindView(R.id.p_suodingdays)
TextView pSuodingdays;
@BindView(R.id.p_minzouzi)
TextView pMinzouzi;
@BindView(R.id.p_minnum)
TextView pMinnum;
@BindView(R.id.p_progresss)
RoundProgress pProgresss;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
第一次封装
public abstract class MyBaseAdpapter<T> extends BaseAdapter {
List<T> list;
public MyBaseAdpapter(List<T> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=myGetView(position, convertView, parent);
return view;
}
public abstract View myGetView(int position, View convertView, ViewGroup parent);
}
然后可以这样使用 public class ProductAdapter1 extends MyBaseAdpapter { public ProductAdapter1(List list) { super(list); }
@Override
public View myGetView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item_product_list, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//装配数据
Product product = list.get(position);
holder.pMinnum.setText(product.memberNum);
holder.pMinzouzi.setText(product.minTouMoney);
holder.pMoney.setText(product.money);
holder.pName.setText(product.name);
holder.pProgresss.setProgress(Integer.parseInt(product.progress));
holder.pSuodingdays.setText(product.suodingDays);
holder.pYearlv.setText(product.yearRate);
return convertView;
}
static class ViewHolder {
@BindView(R.id.p_name)
TextView pName;
@BindView(R.id.p_money)
TextView pMoney;
@BindView(R.id.p_yearlv)
TextView pYearlv;
@BindView(R.id.p_suodingdays)
TextView pSuodingdays;
@BindView(R.id.p_minzouzi)
TextView pMinzouzi;
@BindView(R.id.p_minnum)
TextView pMinnum;
@BindView(R.id.p_progresss)
RoundProgress pProgresss;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
第二次封装:对getView进行封装
public abstract class MyBaseAdpapter1<T> extends BaseAdapter {
List<T> list;
public MyBaseAdpapter1(List<T> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = initView(parent.getContext());
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
T t = list.get(position);//获取集合数据
setData(convertView,t);//设置控件数据
return convertView;
}
protected abstract void setData(View convertView, T t);
protected abstract View initView(Context context);
class ViewHolder {
public ViewHolder(View itemView) {
}
}
}
可以这样使用:
public class ProductAdapter2 extends MyBaseAdpapter1<Product> {
public ProductAdapter2(List<Product> list) {
super(list);
}
@Override
protected void setData(View convertView, Product product) {
((TextView)convertView.findViewById(R.id.p_name)).setText(product.name);
((TextView)convertView.findViewById(R.id.p_money)).setText(product.money);
((TextView)convertView.findViewById(R.id.p_yearlv)).setText(product.yearRate);
((TextView)convertView.findViewById(R.id.p_suodingdays)).setText(product.suodingDays);
((TextView)convertView.findViewById(R.id.p_minzouzi)).setText(product.minTouMoney);
((TextView)convertView.findViewById(R.id.p_minnum)).setText(product.memberNum);
((RoundProgress)convertView.findViewById(R.id.p_progresss)).setProgress(Integer.parseInt(product.progress));
}
@Override
protected View initView(Context context) {
return View.inflate(context,R.layout.item_product_list,null);
}
}
第三次封装:
首先MyBaseAdapter
public abstract class MyBaseAdpapter3<T> extends BaseAdapter {
List<T> list;
public MyBaseAdpapter3(List<T> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
BaseHolder holder = null;
if (convertView == null) {
holder = getHolder();
} else {
holder = (BaseHolder<T>) convertView.getTag();
}
T t = list.get(position);
holder.setData(t);
return holder.getRootView();
}
public abstract BaseHolder getHolder();
}
我将数据处理放到holder(BaseHolder封装)
public abstract class BaseHolder<T> {
private View rootView;
private T data;
public BaseHolder() {
rootView = initView();
rootView.setTag(this);
ButterKnife.bind(this, rootView);
}
//设置布局
public abstract View initView();
public View getRootView() {
return rootView;
}
public void setData(T data) {
this.data = data;
refreshData();
}
protected abstract void refreshData();
public T getData() {
return data;
}
}
举例实现,首先MyHolder继承BaseHolder
public class MyHolder extends BaseHolder<Product> {
@BindView(R.id.p_name)
TextView pName;
@BindView(R.id.p_money)
TextView pMoney;
@BindView(R.id.p_yearlv)
TextView pYearlv;
@BindView(R.id.p_suodingdays)
TextView pSuodingdays;
@BindView(R.id.p_minzouzi)
TextView pMinzouzi;
@BindView(R.id.p_minnum)
TextView pMinnum;
@BindView(R.id.p_progresss)
RoundProgress pProgresss;
@Override
public View initView() {
return View.inflate(UIUtils.getContext(), R.layout.item_product_list, null);//UIUtils.getContext(),MyApplication的上下文
}
@Override
protected void refreshData() {
Product product = this.getData();
pMinnum.setText(product.memberNum);
pMinzouzi.setText(product.minTouMoney);
pMoney.setText(product.money);
pName.setText(product.name);
pProgresss.setProgress(Integer.parseInt(product.progress));
pSuodingdays.setText(product.suodingDays);
pYearlv.setText(product.yearRate);
}
}
ProductAdapter3实现方法
public class ProductAdapter3 extends MyBaseAdpapter3 {
public ProductAdapter3(List list) {
super(list);
}
@Override
public BaseHolder getHolder() {
return new MyHolder();
}
}