android 抽象 BaseAdapter ,如何简化listview数据填补

刚接触listview的时候,采用的数据填补是内部类集成baseadapter,重写getCount()、getItem(int position)、getItemId(int position)、getView(int position, View convertView,

ViewGroup parent)方法等、或许,还要写一个构造方法

当然,拿来说demo还是很不错的,而且很快捷。但是当你在app里需要很多地方都用到listview时,这样的方法就会显得很鸡肋,你需要多次重复的实现上述操作,你的activity会很臃肿,而且耗时。如果把上述方法抽象成一个父类,每次使用只需要重写必要方法,岂不是更好?

 

步骤+代码

1.新建这个父类 MyBaseAdapter ;代码如下:

public abstract class MyBaseAdapter<T> extends BaseAdapter {
protected Context mcontext;
protected LayoutInflater mlayoutInflater;
protected List<T> mlist = new ArrayList<T>();


public MyBaseAdapter(Context context) {
mcontext = context;
mlayoutInflater = LayoutInflater.from(context);
}


/**
* 判断list是否为空
* */
public boolean isEmpty() {
return mlist.isEmpty();
}


/**
* 添加数据
* */
public void addItems(List<T> itemsList) {
mlist.addAll(itemsList);
notifyDataSetChanged();
}


/**
* 设置新数据,旧数据会清空
* */
public void setItems(List<T> itemsList) {
mlist.clear();
mlist = itemsList;
notifyDataSetChanged();
}


/**
* 清空数据
* */
public void cleanItems() {
mlist.clear();
notifyDataSetChanged();
}


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


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


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


@Override
abstract public View getView(int position, View convertView,
ViewGroup parent);


}

2.新建你的adapter类:例如:A ,继承MyBaseAdapter

public class A extends
MyBaseAdapter<T> {
 


public UserCenter_Project_Adapter(Context context, int UserIDTemp) {
super(context); 
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (null == convertView) {
holder = new ViewHolder(); 
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();

return convertView;
}


class ViewHolder { 
}
}

3.在你的activity里,一般会用到上拉加载或下拉刷新等,这个操作也很简单。

a.下拉刷新:

pullToRefreshListView.setAdapter(adapter);
adapter.setItems(list);

b.上拉加载:

adapter.addItems(listTemp);

 

这样,adapter的使用就结束了。

补充:

 代码中的T是你根据服务器数据创建的model,即实体类

 

 

 

 

 

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...