`

android listView的BaseAdapter的抽取

 
阅读更多
/**
* BaseAdapter的抽取
* @author xu-pc
*
* @param <T>
* 泛型数据的格式
* 需实现getHolder()
*/
public abstract class SuperBaseAdapter<T> extends BaseAdapter{
private List<T> mData;
/*public SuperBaseAdapter(List<T> list) {
this.mData = list;
}*/
public SuperBaseAdapter(List<T> data) {
this.mData = data;
}

@Override
public int getCount() {
return mData.size();
}

@Override
public Object getItem(int position) {
return mData.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) convertView.getTag();
}
holder.setData(mData.get(position));
return holder.convertView;
}
public abstract BaseHolder getHolder();


}
/**
* 抽取的holder
* @author xu-pc
*
* @param <T>
* 数据的泛型需要在子类中设定
*/
public abstract class BaseHolder<T>{
/**
* 1.布局文件 convertView
* 2.holder 绑定
* 3.数据mData
*/
public View convertView;
public T mData;
public Context context;


public BaseHolder() {
convertView = initView();
convertView.setTag(this);//绑定tag
}

public void setData(T dada){
this.mData = dada;
refreshView();
}
public abstract void refreshView();//数据设置

public abstract View initView();
}
//使用案例
/**
* 设置ListView的适配器
* @author zhenggangyao
*
*/
class OrderReceiverAdapter extends SuperBaseAdapter<OrderReceivertDTO>{

public OrderReceiverAdapter(List<OrderReceivertDTO> data) {
super(data);
}

@Override
public BaseHolder getHolder() {
return new OrderReveiverHolder();
}
}

public class OrderReveiverHolder extends BaseHolder<OrderReceivertDTO> {

private TextView tv_time;//发件的日期时间
private TextView tv_type;//快件类型
private TextView tv_name;//发件人姓名
private TextView tv_phone;//发件人电话
private TextView tv_address;//发件人详细地址

@Override
public void refreshView() {
tv_time.setText(mData.getSendConpany());
tv_type.setText(mData.getPackageClassName());
tv_name.setText(mData.getSendName());
tv_phone.setText(mData.getSendPhone());
tv_address.setText(mData.getSendAddress());
}

@Override
public View initView() {
View view = View.inflate(AppContext.getInstance(), R.layout.item_fragment_main, null);
tv_time = (TextView) view.findViewById(R.id.txt_date);
tv_type = (TextView) view.findViewById(R.id.txt_receiver_state);
tv_name = (TextView) view.findViewById(R.id.txt_name);
tv_phone = (TextView) view.findViewById(R.id.txt_phonenum);
tv_address = (TextView) view.findViewById(R.id.txt_address);
return view;
}
}
分享到:
评论

相关推荐

    BaseAdapter抽取

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。在处理动态数据时,我们通常需要自定义适配器来绑定数据。BaseAdapter作为ListView的抽象基类,是自定义适配器的一种常见选择。本篇文章将深入...

    一辈子只写一次的BaseAdapter,绝对好用

    BaseAdapter是Android SDK提供的一个基础适配器类,开发者需要继承它并重写其中的方法,如`getView()`,以便将数据绑定到ListView或GridView的每个Item上。然而,BaseAdapter的直接使用往往会导致性能问题,因为每次...

    安卓listview相关相关-EuclidListView滑动和点击进去其他页面特效.zip

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。本资源"安卓listview相关相关-EuclidListView滑动和点击进去其他页面特效.zip"似乎包含了一个名为"EuclidListView"的自定义ListView实现,...

    安卓平台下通用适配器类设计与实现.pdf

    在Android应用开发中,Adapter类起着至关重要的作用,它是数据与视图之间的桥梁,使得数据可以被适配并显示在ListView、GridView等组件上。Android系统遵循MVC(Model-View-Controller)模式,Activity作为...

    ming_banner_desc

    在Android应用开发中,`ListView`是一个极为常见的组件,它被广泛应用于展示各种列表数据,如资讯列表、联系人列表、消息列表等。由于`ListView`的高频率使用,如何对其进行有效的优化,以提高性能并简化代码逻辑变...

Global site tag (gtag.js) - Google Analytics