在android開發中,常用ListView、GridView來顯示多項數據。對適配器加以優化能夠讓每次適配數據變得更加簡單,性能更加高效。下面是適配器優化後的代碼:
public abstract class CommonAdapter<<span style="color:#20999d;">T> extends BaseAdapter{
Context context; int resId; List<</font>T> datas; LayoutInflater layoutInflater; public CommonAdapter(List<</font>T> datas,Context context,int resId) {
this.datas=datas; this.context=context; this.resId=resId; layoutInflater=LayoutInflater.from(context); } @Override public int getCount() {
return datas.size(); } @Override public Object getItem(int i) { return datas.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { T data = datas.get(i); if(view==null) {
view = layoutInflater.inflate(resId,null); ViewHolder holder = new ViewHolder(view); view.setTag(holder); } ViewHolder holder = (ViewHolder) view.getTag();
setData(data,holder,context); return view; } public abstract void setData(T data, ViewHolder holder,Context context); }
//創建一個類來保存控件
public class ViewHolder { Map allview = new HashMap<>(); View item; public ViewHolder(View item) { this.item=item; } public View getView(int redid) { View v = allview.get(redid); if(v==null) { View view = item.findViewById(redid); allview.put(redid,view); return view; } else{ return v; } } }
//使用適配器:
public class ArticleAdapter extends CommonAdapter{ public ArticleAdapter(List datas, Context context, int resId) { super(datas, context, resId); } @Override public void setData(Article data, ViewHolder holder,Context context) { ImageView logo = (ImageView)holder.getView(R.id.alogo); TextView title = (TextView)holder.getView(R.id.aname);
logo.setImageBitmap(data.logo); title.setText(data.title); } }
使用適配器時,傳入數據,上下文,模板id即可