剛開始接觸android的時候,有些東西並不會在意,可能自己並沒有寫太多的原因,隨着項目越來越大,我們重複的工作做得越來越多,這個時候我們就會想着怎麼才能簡化我們的代碼,android中的ListView用的還是很多的,所以就做了一個簡化的萬能適配器Adapter,主要就是利用JAVA中的命令模式進行開發的,如果有特別的功能,可自行在代碼裏添加修改,這只是單佈局,多佈局也差不多,也就是傳入佈局id,根據類型進行判斷
public static class Adapter<T> extends BaseAdapter {
private Context context;
private List<T> data = new ArrayList<>();
private int layoutId = -1;
private OnGetView onGetView = null;
Adapter(Context context, List<T> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
//因爲考慮到item佈局重用的情況,優化ListView
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
convertView.setTag(new ViewHolder(context, convertView));
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
onGetView.getView(viewHolder,position,data);
return convertView;
}
public int setLayout(int layoutId) {
return this.layoutId = layoutId;
}
public void setOnGetView(OnGetView onGetView) {
this.onGetView = onGetView;
}
//新建一個接口-把給用戶的操作集中到一塊,給用戶操作,採用java的命令模式,可自行學習
public interface OnGetView<T> {
void getView(ViewHolder viewHolder, int position, List<T> data);
}
//封裝一個萬能的ViewHolder
static class ViewHolder {
SparseArray<View> data = new SparseArray<>();
View rootView = null;
Context context;
ViewHolder(Context context, View rootView) {
this.context = context;
this.rootView = rootView;
}
public <T extends View> T getView(int id) {
View curView = data.get(id);
if (curView == null) {
curView = rootView.findViewById(id);
data.put(id, curView);
}
return (T) curView;
}
public View getRootView(){
return rootView;
}
}
}