萬能ListView適配器

首先寫一個通用的ViewHolder

public class CommonViewHolder {    
private final SparseArray<View> mViews;    
private  View mConvertView;    
private int mPosition;    
public CommonViewHolder(Context context,ViewGroup parent,int layoutID,int position) {        
this.mViews = new SparseArray<>();        
mConvertView = LayoutInflater.from(context).inflate(layoutID,parent,false);        
mConvertView.setTag(this);        
mPosition = position;    
}    
public  static CommonViewHolder get(Context context,View convertView,ViewGroup parent,int layoutID,int position){        
if(convertView == null){            
return new CommonViewHolder(context,parent,layoutID,position);        
}        
return (CommonViewHolder)convertView.getTag();    
}    
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 getmConvertView(){        
return mConvertView;    
}    
public int getmPosition() {        
return mPosition;  
  }}

然后寫一個通用的adapter

public abstract class CommonAdapter<T> extends BaseAdapter {    
private LayoutInflater mInflater;    
private Context mContext;    
protected  List<T> mDatas;    
protected final int mItemLayoutID;    
private int mPosition;    
public CommonAdapter(Context mContext, List<T> mDatas,int mItemLayoutID) {        
this.mContext = mContext;        
this.mDatas = mDatas;        
this.mItemLayoutID = mItemLayoutID;    
}    
@Override    
public long getItemId(int position) {        
return position;   
 }   
 @Override  
  public int getCount() {      
  return mDatas.size();  
  }   
 @Override 
   public T getItem(int position) {      
  return mDatas.get(position);   
 }    
public int getmPosition() {       
 return mPosition;   
 }   
 @Override    
public View getView(int position, View convertView, ViewGroup parent) {        
final CommonViewHolder viewHolder = getViewHolder(position,convertView,parent);       
 mPosition = position;       
 convert(viewHolder,getItem(position));      
  return viewHolder.getmConvertView();  
  }   
 protected abstract void convert(CommonViewHolder viewHolder, T item);    
private CommonViewHolder getViewHolder(int position,View convertView,ViewGroup parent){        
return CommonViewHolder.get(mContext,convertView,parent,mItemLayoutID,position);   
 }}

調用時

lv_voc.setAdapter(new CommonAdapter<Map<String,Vocabulary>>(        getApplicationContext(),list,R.layout.item) {    
@Override    
protected void convert(CommonViewHolder viewHolder, Map<String, Vocabulary> item) {        
TextView voc_name = viewHolder.getView(R.id.item_voc);        
Vocabulary bean = list.get(getmPosition()).get("name");        
voc_name.setText(bean.name);   
 }});
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容