BaseAdapter的封装

ListView的使用,必须有一个装配数据的适配器。所以BaseAdapter的封装就显得尤为重要。
适配器的作用:将具体的集合数据装配到具体的一个item layout中
问题一:数据类型是不确定的。
问题二:item layout的布局是不确定的
问题三:将集合中指定位置的数据装配到item,是不确定的。
因为数据类型不确定,所以我们把封装类写为泛型类。
基于数据装配的优化,我们把ViewHolder封装了一个基类。


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.List;

/**
 * 作者: willkong on 2017/11/14.
 * 作用:BaseAdapter的抽取
 */
public abstract class MyBaseAdapter3<T> extends BaseAdapter{
    public List<T> list;
    public MyBaseAdapter3(Context context,List<T>list){
        this.list = list;
    }

    @Override
    public int getCount() {
        return list==null?0:list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    //将具体的集合数据装配到具体的一个item layout中
    //问题一:item layout的布局是不确定的
    //问题二:将集合中指定位置的数据装配到item,是不确定的。
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        BaseHolder<T> holder;
        if (convertView==null){
            holder = getHolder();
        }else {
            holder = (BaseHolder<T>) convertView.getTag();
        }
        //装配数据
        T t = list.get(position);
        holder.setData(t);

        return holder.getRootView();
    }

    protected abstract BaseHolder<T> getHolder();
}

import android.content.Context;
import android.view.View;

import butterknife.ButterKnife;

/**
 * 作者: willkong on 2017/11/14.
 * 作用:缓存器
 */
public abstract class BaseHolder<T> {
    private View rootView;
    private T data;

    public BaseHolder(Context context){
        rootView = initView(context);
        rootView.setTag(this);
        ButterKnife.bind(this,rootView);
    }

    //提供item的布局
    protected abstract View initView(Context context);

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
        refreshData();
    }

    //装配过程
    protected abstract void refreshData();

    public View getRootView() {
        return rootView;
    }
}

使用示例:

      //方式四:
            ProductAdapter3 productAdapter3 = new ProductAdapter3(getActivity(),productList);
            lvProductList.setAdapter(productAdapter3);//显示列表

import android.content.Context;
import android.view.View;
import android.widget.TextView;

import com.willkong.p2pclient.R;
import com.willkong.p2pclient.bean.Product;
import com.willkong.p2pclient.ui.RoundProgress;

import butterknife.Bind;

/**
 * 作者: willkong on 2017/11/14.
 * 作用:xxx
 */
public class MyHolder extends BaseHolder<Product> {
    @Bind(R.id.p_name)
    TextView pName;
    @Bind(R.id.p_money)
    TextView pMoney;
    @Bind(R.id.p_yearlv)
    TextView pYearlv;
    @Bind(R.id.p_suodingdays)
    TextView pSuodingdays;
    @Bind(R.id.p_minzouzi)
    TextView pMinzouzi;
    @Bind(R.id.p_minnum)
    TextView pMinnum;
    @Bind(R.id.p_progresss)
    RoundProgress pProgresss;

    public MyHolder(Context context) {
        super(context);
    }

    @Override
    protected View initView(Context context) {
//        return View.inflate(UIUtils.getContext(), R.layout.item_product_list, null);
        return View.inflate(context, R.layout.item_product_list, null);
    }

    @Override
    protected void refreshData() {
        Product 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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值