您的位置:首页 > 移动开发 > Android开发

Android中的Adapter封装

2016-05-08 16:37 316 查看
转载请注明出处:/article/10395501.html

在Android开发中经常会用到Adapter,经常要实现一大堆方法。为了简化开发,不多做一些简单繁琐的工作,我对Adapter进行了封装。

/**
* 要先在构造函数中调用setLayoutId()设置布局文件
*
* @author zhanjixun
*
* @param <T>
*/
public abstract class EasyAdapter<T> extends BaseAdapter {

protected List<T> mList = new LinkedList<T>();
protected Context mContext;
protected int mLayoutId;

public EasyAdapter(Context context, List<T> list) {
mContext = context;
mList = list;
}

/**
* 获取适配器的数据
*
* @return
*/
public List<T> getList() {
return mList;
}

/**
* 单个添加数据
*
* @param item
*/
public void add(T item) {
mList.add(item);
notifyDataSetChanged();
}

/**
* 追加数据
*
* @param list
*/
public void append(List<T> list) {
mList.addAll(list);
notifyDataSetChanged();
}

/**
* 替换数据,不关联参数的List
*
* @param list
*/
public void replace(List<T> list) {
mList.clear();
mList.addAll(list);
notifyDataSetChanged();
}

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

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

@Override
public T getItem(int position) {
return mList.get(position);
}

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

public Context getContext() {
return mContext;
}

public int getLayoutId() {
return mLayoutId;
}

protected void setLayoutId(int layoutId) {
mLayoutId = layoutId;
}

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

ViewHolder holder = null;

if (convertView == null) {
View view = convertView = View.inflate(mContext, mLayoutId, null);
holder = new ViewHolder(view);
view.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// 填充信息
convert(position, holder, getItem(position));

return holder.getConvertView();
}

protected abstract void convert(int position, ViewHolder holder, T item);

}
其中用到的ViewHolder是用来保存重用的view的,可以在这里设置特定的item的数据

代码如下:(其中除了一大堆常用的view的api之外,关键代码在前面几个方法,构造函数ViewHolder(View)通过传入一个View来持有这个View,findViewById,通过id定位子控件)

/**
* view持有
*
* @author zhanjixun
*
*/
public class ViewHolder {

private final SparseArray<View> mViews = new SparseArray<View>();

private View mConvertView;

public ViewHolder(View v) {
mConvertView = v;
}

/**
* 通过viewId获取控件
*
* @param viewId
* @return
*/
@SuppressWarnings("unchecked")
public <T extends View> T findViewById(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}

/**
* 得到持有的View
*
* @return
*/
public View getConvertView() {
return mConvertView;
}

public ViewHolder setText(int viewId, String text) {
TextView tv = findViewById(viewId);
tv.setText(text);
return this;
}

public ViewHolder setImageResource(int viewId, int resId) {
ImageView view = findViewById(viewId);
view.setImageResource(resId);
return this;
}

public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
ImageView view = findViewById(viewId);
view.setImageBitmap(bitmap);
return this;
}

public ViewHolder setImageDrawable(int viewId, Drawable drawable) {
ImageView view = findViewById(viewId);
view.setImageDrawable(drawable);
return this;
}

public ViewHolder setBackgroundColor(int viewId, int color) {
View view = findViewById(viewId);
view.setBackgroundColor(color);
return this;
}

public ViewHolder setBackgroundResource(int viewId, int backgroundRes) {
View view = findViewById(viewId);
view.setBackgroundResource(backgroundRes);
return this;
}

public ViewHolder setTextColor(int viewId, int textColor) {
TextView view = findViewById(viewId);
view.setTextColor(textColor);
return this;
}

public ViewHolder setTextColorResource(int viewId, int textColorRes) {
TextView view = findViewById(viewId);
Resources resources = mConvertView.getContext().getResources();
view.setTextColor(resources.getColor(textColorRes));
return this;
}

public ViewHolder setVisibility(int viewId, int visible) {
View view = findViewById(viewId);
view.setVisibility(visible);
return this;
}

public ViewHolder setProgress(int viewId, int progress) {
ProgressBar view = findViewById(viewId);
view.setProgress(progress);
return this;
}

public ViewHolder setProgress(int viewId, int progress, int max) {
ProgressBar view = findViewById(viewId);
view.setMax(max);
view.setProgress(progress);
return this;
}

public ViewHolder setProgressMax(int viewId, int max) {
ProgressBar view = findViewById(viewId);
view.setMax(max);
return this;
}

public ViewHolder setRating(int viewId, float rating) {
RatingBar view = findViewById(viewId);
view.setRating(rating);
return this;
}

public ViewHolder setRating(int viewId, float rating, int max) {
RatingBar view = findViewById(viewId);
view.setMax(max);
view.setRating(rating);
return this;
}

public ViewHolder setTag(int viewId, Object tag) {
View view = findViewById(viewId);
view.setTag(tag);
return this;
}

public ViewHolder setTag(int viewId, int key, Object tag) {
View view = findViewById(viewId);
view.setTag(key, tag);
return this;
}

public ViewHolder setChecked(int viewId, boolean checked) {
Checkable view = (Checkable) findViewById(viewId);
view.setChecked(checked);
return this;
}

public ViewHolder setOnClickListener(int viewId,
View.OnClickListener listener) {
View view = findViewById(viewId);
view.setOnClickListener(listener);
return this;
}

public ViewHolder setOnTouchListener(int viewId,
View.OnTouchListener listener) {
View view = findViewById(viewId);
view.setOnTouchListener(listener);
return this;
}

public ViewHolder setOnLongClickListener(int viewId,
View.OnLongClickListener listener) {
View view = findViewById(viewId);
view.setOnLongClickListener(listener);
return this;
}
}


使用方法:

写一个类直接继承EasyAdapter声明的泛型为你要处理的数据的类型,然后实现convert方法处理数据的绑定

public class ListViewAdapter extends EasyAdapter<String> {

public ListViewAdapter(Context context, List<String> list) {
super(context, list);
setLayoutId(R.layout.item_listview);
}

@Override
public void convert(int position, ViewHolder holder, String item) {
super.convert(position, holder, item);
holder.setText(R.id.mainTextView, item);
}

}


源代码:因为基本上的代码都在上面了,看懂的都能直接用了,这里就不提供项目代码了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: