ViewHolder基类,带声音的SoundToast

来源:互联网 发布:剑桥倚天屠龙史 知乎 编辑:程序博客网 时间:2024/06/06 04:46

/**

 * 通用ViewHolder缓存类
 * 
 * @author chenxiaosong
 * 
 */
public class ViewHolder {
private ImageLoader mImageLoader;
private final SparseArray<View> mViews;
private int mPosition;
private View mConvertView;
public ViewHolder(Context context,ViewGroup parent,int layoutId,int mPosition) {
super();
this.mPosition = mPosition;
this.mViews=new SparseArray<View>();
mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,false);
mConvertView.setTag(this);
}
//拿到一个ViewHolder对象
public static ViewHolder get(Context context, View convertView,ViewGroup parent,int layoutId, int position){
if(convertView==null){
return new ViewHolder(context, parent, layoutId, position);
}
return (ViewHolder) convertView.getTag();
}
public View getConvertView(){
return mConvertView;
}
//通过控件的id获取对应的控件,如果没有则加入views
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;
}
//为textView设置字符串
public ViewHolder setText(int viewId,String text){
TextView view=getView(viewId);
view.setText(text);
return this;
}
//为ImageView设置图片
public ViewHolder setImageResource(int viewId,int drawableId){
ImageView view=getView(viewId);
view.setImageResource(drawableId);
return this;
}
//为ImageView设置图片
public ViewHolder setImageBitmap(int viewId,Bitmap bm){
ImageView view=getView(viewId);
view.setImageBitmap(bm);
return this;
}
//为ImageView设置图片
public ViewHolder setImageByUrl(int viewId,String url){
mImageLoader.displayImage(url, (ImageView)getView(viewId));
return this;
}

public int getPosition(){
return mPosition;
}

}


public abstract class CommonAdapter<T> extends BaseAdapter {
protected LayoutInflater mInflater;
protected Context mContext;
protected List<T> mDatas;
protected final int mItemLayoutId;
public CommonAdapter(Context context,List<T> mDatas,int itemLayoutId){
this.mContext=context;
this.mInflater=LayoutInflater.from(mContext);
this.mDatas=mDatas;
this.mItemLayoutId=itemLayoutId;
}

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


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


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


@Override
public View getView(int position, View convertView, ViewGroup parent) {
//从ViewHolder中获取控件view,若为空则创建
final ViewHolder viewHolder=getViewHolder(position,convertView,parent);
convert(viewHolder, getItem(position));
return viewHolder.getConvertView();
}

//抽取出getView中间改变的部分
public abstract void convert(ViewHolder helper,Object object);

private ViewHolder getViewHolder(int position,View convertView,ViewGroup parent){
return ViewHolder.get(mContext, convertView, parent, mItemLayoutId, position);
}
}



/**
 * 自定义声音提示Toast控件
 * @author chenxiaosong
 *
 */
public class SoundToast extends Toast{
private MediaPlayer mPlayer;
private boolean isSound;

public SoundToast(Context context) {
this(context,false);
}
public SoundToast(Context context,boolean isSound){
super(context);
this.isSound=isSound;

// mPlayer=MediaPlayer.create(context, resid)
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});

}
public void show(){
super.show();
if(isSound){
mPlayer.start();
}
}

//获取控件实例
public static SoundToast show(Context context,CharSequence text,boolean isSound,int duration){
SoundToast result=new SoundToast(context,isSound);
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DisplayMetrics dm=context.getResources().getDisplayMetrics();
View v=inflater.inflate(R.layout.abc_action_bar_decor, null);//加载toast布局
v.setMinimumWidth(dm.widthPixels);//设置控件最小宽度为手机屏幕宽度
TextView tv=(TextView)v.findViewById(R.id.action_bar);
tv.setText(text);
result.setView(v);
result.setDuration(duration);
return result;
}
}

0 0
原创粉丝点击