package com.martin.simpledevelop.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
import com.martin.simpledevelop.utils.cache.BitmapCache;
import com.martin.simpledevelop.utils.log.SaLogUtils;
/**
* @Description 结合SaBaseAdapter一起使用, ListView万能适配器
* @File SaViewHolder.java
* @Package com.martin.view.adapter
* @Date 2015年6月23日下午9:03:47
* @Author Donghongyu 1358506549@qq.com
* @Version v1.0.0
*/
public class SaViewHolder {
//
private SparseArray<View> mViews;
//
private int mPostion;
//
private View mConvertView;
//基于Volley的图片加载
private ImageLoader mImageLoader;
public SaViewHolder(Context context, ViewGroup parent, int layoutId,
int position) {
this.mPostion = position;
this.mViews = new SparseArray<View>();
// 填充条目布局为布局对象
this.mConvertView = LayoutInflater.from(context).inflate(layoutId,
parent, false);
this.mConvertView.setTag(this);
RequestQueue mQueue = Volley.newRequestQueue(context);
mImageLoader = new ImageLoader(mQueue, new BitmapCache(context));
}
/**
* 根据传入的参数返回一个ViewHolder
*
* @param context 上下文
* @param convertView 要转换的控件
* @param parent 父控件
* @param layoutId 要填充的布局id
* @param position 位置信息
* @return
*/
public static SaViewHolder get(Context context, View convertView,
ViewGroup parent, int layoutId, int position) {
// 如果传入的转换convertView为null,创建一个新的Viewholder返回使用
if (convertView == null) {
SaLogUtils.e("SaViewHolder", "getView>>>");
return new SaViewHolder(context, parent, layoutId, position);
}
// 如果不为null,那么直接从tag中取出并返回,节省时间
else {
SaViewHolder saViewHolder = (SaViewHolder) convertView.getTag();
// 需要更新ViewHolder对应的位置信息
saViewHolder.mPostion = position;
return saViewHolder;
}
}
/**
* 跟据指定的id进行view组件的获取,获取后保存到mViews中方便下次使用的时快速得到;
*
* @param viewId 控件id
* @return
*/
public <T extends View> T getView(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
public View getConvertView() {
return mConvertView;
}
/**
* 给TextView设置值,并采用链式编程将当前ViewHolder返回
*
* @param viewId
* @param text
* @return
*/
public SaViewHolder setText(int viewId, String text) {
TextView tv = getView(viewId);
tv.setText(text);
return this;
}
/**
* 给View设置显示与隐藏,并采用链式编程将当前ViewHolder返回
*
* @param viewId
* @param isVisable
* @return
*/
public SaViewHolder setVisable(int viewId, boolean isVisable) {
View view = getView(viewId);
if (isVisable) {
view.setVisibility(View.VISIBLE);
} else {
view.setVisibility(View.INVISIBLE);
}
return this;
}
/**
* 给ImageVie设置本地资源,并采用链式编程将当前ViewHolder返回
*
* @param viewId
* @param resId
* @return
*/
public SaViewHolder setImageResource(int viewId, int resId) {
ImageView view = getView(viewId);
view.setImageResource(resId);
return this;
}
/**
* 给ImageVie设置Drawable,并采用链式编程将当前ViewHolder返回
*
* @param viewId
* @param drawable
* @return
*/
public SaViewHolder setImageDrawable(int viewId, Drawable drawable) {
ImageView view = getView(viewId);
view.setImageDrawable(drawable);
return this;
}
/**
* 给ImageVie设置Bitmap,并采用链式编程将当前ViewHolder返回
*
* @param viewId
* @param bm
* @return
*/
public SaViewHolder setImageBitmap(int viewId, Bitmap bm) {
ImageView view = getView(viewId);
view.setImageBitmap(bm);
return this;
}
/**
* 给ImageView设置网络图片
*
* @param viewId 控件的id
* @param imgUrl 网络图片地址
* @param loadingImg 加载中的图片
* @param loaderrorImg 加载失败的图片
* @return
*/
public SaViewHolder setImageUrl(int viewId, String imgUrl, int loadingImg, int loaderrorImg) {
NetworkImageView view = getView(viewId);
view.setTag(imgUrl);
view.setDefaultImageResId(loadingImg);
view.setErrorImageResId(loaderrorImg);
view.setImageUrl(imgUrl, mImageLoader);
return this;
}
}