BaseAdapter的封装(ListView)

首先第一步:我们看下我们一般情况下我们的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();
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值