准备弄个自定义的下拉列表框,本来是想用ArrayAdapter来显示数据的,不过最后还是觉得应该学着写个通用的数组适配器
代码
public abstract class SpinnerAdapter<T> extends BaseAdapter {
protected Context mContext;
private List<T> mObjects;
protected LayoutInflater mInflater;
public SpinnerAdapter(Context context) {
this.mContext = context;
this.mInflater = LayoutInflater.from(context);
//虽然List<T>类型的能被直接赋值,但是在使用add方法填充数据的时候必须先给其分配存储空间
this.mObjects = new ArrayList();
}
public SpinnerAdapter(Context context, List<T> objects) {
this.mContext = context;
this.mInflater = LayoutInflater.from(context);
if(objects != null && objects.size() > 0) {
this.mObjects = objects;
} else {
this.mObjects = new ArrayList();
}
}
/**
* 初始化数据
* @param objects 传入的数据
*/
public void refreshData(List<T> objects) {
if (objects != null) {
this.mObjects.clear();
this.mObjects.addAll(objects);
this.notifyDataSetChanged();
}
}
/**
* 在列表头部添加单个数据
* @param objects 要添加的数据
*/
public void addHead(T objects) {
if(objects != null) {
this.mObjects.add(0, objects);
this.notifyDataSetChanged();
}
}
/**
* 在列表头部添加一组数据
* @param objects 要添加的数据
*/
public void addHead(List<T> objects) {
if(objects != null) {
for(int i = 0; i < objects.size(); ++i) {
this.mObjects.add(i, objects.get(i));
}
this.notifyDataSetChanged();
}
}
/**
* 在列表尾部插入数据
* @param objects 要插入的数据
*/
public void add(T objects) {
if(objects != null) {
this.mObjects.add(objects);
this.notifyDataSetChanged();
}
}
/**
* 在指定位置插入数据
* @param position 要插入的位置
* @param objects 要插入的数据
*/
public void add(int position, T objects) {
if(position >= 0 && position < this.mObjects.size() && objects != null) {
this.mObjects.add(position, objects);
this.notifyDataSetChanged();
}
}
/**
* 更新指定位置的数据
* @param position 要更新数据的位置
* @param objects 要更新的数据
*/
public void update(int position, T objects) {
if(position >= 0 && position < this.mObjects.size() && objects != null) {
this.mObjects.remove(position);
this.mObjects.add(position, objects);
this.notifyDataSetChanged();
}
}
/**
* 在列表尾部添加一组数据
* @param objects 要添加的数据
*/
public void addAll(List<T> objects) {
if(objects != null) {
this.mObjects.addAll(objects);
this.notifyDataSetChanged();
}
}
/**
* 清除数据
*/
public void clear() {
this.mObjects.clear();
this.notifyDataSetChanged();
}
/**
* 删除指定位置的数据
* @param position 要被删除数据的位置
*/
public void delete(int position) {
if(position >= 0 && position < this.mObjects.size()) {
this.mObjects.remove(position);
this.notifyDataSetChanged();
} else {
Toast.makeText(this.mContext, "要删除数据的位置不存在", Toast.LENGTH_SHORT);
}
}
@Override
public int getCount() {
return mObjects.size();
}
@Override
public Object getItem(int position) {
return this.mObjects != null && this.mObjects.size() > 0 && position >= 0 && position < this.mObjects.size()
?this.mObjects.get(position)
:null;
}
@Override
public long getItemId(int position) {
return (long) position;
}
}