ListView 和GroupView之萬能介面卡
阿新 • • 發佈:2018-12-12
ViewHoler的編寫:
public class ViewHoler { private SparseArray<View> mViews; //用於儲存View控制元件 private int mPostion; //postion當前的條目 private View mConverview; //私有化構造器 private ViewHoler(Context context, ViewGroup preant, int layoutId, int position) { this.mPostion = position; this.mViews = new SparseArray<>(); mConverview = LayoutInflater.from(context).inflate(layoutId, preant, false); /* mConverview = View.inflate(context, layoutId, preant);*/ mConverview.setTag(this); } //單利模式獲取ViewHolder物件 public static ViewHoler getInstance(Context context, ViewGroup preant, int layoutId, View convertView, int position) { if (convertView == null) { return new ViewHoler(context, preant, layoutId, position); } else { ViewHoler viewHoler = (ViewHoler) convertView.getTag(); viewHoler.mPostion = position; return viewHoler; } } //獲取當前物件 public <T extends View> T getView(int viewId) { View view = mViews.get(viewId); if (view == null) { view = mConverview.findViewById(viewId); mViews.put(viewId, view); } return (T) view; } //獲取當前的converView public View getConverview() { return mConverview; } //設定文字 public ViewHoler setText(int viewId, String context) { TextView tv = getView(viewId); tv.setText(context); return this; } //設定圖片 public ViewHoler setImageResource(int viewId, int resout) { ImageView im = getView(viewId); im.setImageResource(resout); return this; } //.......相應的新增自己想要的功能如獲取網路圖片等 }
Adapter的編寫:
public abstract class CommonAdapter<T> extends BaseAdapter { protected Context mContext; //定義Context物件 protected List<T> datas; //List集合使用了T的應用可以把它當成一個類 protected LayoutInflater mInflater; //例項化佈局物件 public CommonAdapter(Context mContext, List<T> datas) { this.mContext = mContext; this.datas = datas; mInflater = LayoutInflater.from(mContext); } @Override public int getCount() { return datas.size(); } @Override public T getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHoler viewHoler = ViewHoler.getInstance(mContext, parent, R.layout.layout_iteam_list, convertView, position); convert(viewHoler, getItem(position)); return viewHoler.getConverview(); } //寫一個抽象方法把viewholder 和 當前的資料提供出去 public abstract void convert(ViewHoler holer, T t); }
使用方法:
JavaBean的封裝
public class Bean { private String title; private String desc; private int picUrl; public Bean(String title, String desc, int picUrl) { this.title = title; this.desc = desc; this.picUrl = picUrl; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getPicUrl() { return picUrl; } public void setPicUrl(int picUrl) { this.picUrl = picUrl; } }
mcontext-->Context物件
beans ---> 一個List泛型為自定義的物件
listview.setAdapter(new CommonAdapter<Bean>(mcontext, beans) {
@Override
public void convert(ViewHoler holer, Bean bean) {
holer.setText(R.id.txt_title, bean.getTitle())
.setText(R.id.txt_desc, bean.getDesc())
.setImageResource(R.id.iv_image, R.mipmap.ic_launcher);
}
});