您的位置:首页 > 其它

BaseAdapter的封装

2017-11-15 10:19 399 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: