前一段時(shí)間在網(wǎng)上找了一個(gè)demo,里面有很多封裝的類(lèi),仔細(xì)看了其中的幾個(gè),對(duì)封裝又有了多一點(diǎn)的認(rèn)識(shí)和理解.在最近做項(xiàng)目的過(guò)程中居然還利用到了,在學(xué)習(xí)的時(shí)候老師一直強(qiáng)調(diào)要我們學(xué)會(huì)封裝,那個(gè)時(shí)候只會(huì)跟著老師做或是在網(wǎng)上找demo照著demo做,沒(méi)想到這次在項(xiàng)目中自己也能做一個(gè)簡(jiǎn)單的封裝,雖然是一個(gè)很簡(jiǎn)單的封裝,但也算是一點(diǎn)小小的進(jìn)步吧.
在做項(xiàng)目時(shí)listview可以說(shuō)是最常用的一個(gè)組件了,在使用時(shí)需要一個(gè)adapter.在項(xiàng)目中也不可能只寫(xiě)一個(gè)listview,經(jīng)常遇到的情況是有很多的頁(yè)面都需要用listview來(lái)顯示數(shù)據(jù),在adapter中有很多的方法都是重復(fù)的,只有ViewHolder是根據(jù)不同的頁(yè)面它的方法是不同的,所以在封裝的時(shí)候只要把ViewHolder拿出來(lái)在需要的時(shí)候重寫(xiě),其他的幾個(gè)方法都可以封裝起來(lái).
封裝的代碼:
public abstract class ListAdapter<T> extends BaseAdapter{
protected List<T> mDatas;
protected Context mContext;
public ListAdapter(Context context) {
mContext = context;
}
public void setDatas(List<T> datas) {
mDatas = datas;
notifyDataSetChanged();
}
@Override
public int getCount() {
return mDatas == null ? 0 : mDatas.size();
}
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
使用的代碼:
public class MyAdapter extends ListAdapter<String>{
public MyAdapter(Context context) {
super(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list,parent,false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.mTextView.setText(mDatas.get(position));
return convertView;
}
class ViewHolder{
private TextView mTextView;
public ViewHolder(View view) {
mTextView = (TextView) view.findViewById(R.id.list_item_tv);
}
}
}
在使用的時(shí)候直接繼承封裝好的adapter在這里只需要復(fù)寫(xiě)getView()這一個(gè)方法就可以了.如果需要多個(gè)adapter這樣的話寫(xiě)起來(lái)會(huì)少寫(xiě)很多.
寫(xiě)出來(lái)之后再看,其實(shí)也不時(shí)很難,當(dāng)時(shí)就是不會(huì),搞不懂這個(gè)getView()方法怎么單獨(dú)拿出來(lái),現(xiàn)在看來(lái),就是當(dāng)時(shí)對(duì)抽象類(lèi)的不理解,不知道在抽象類(lèi)里可以不用全部復(fù)寫(xiě)父類(lèi)的方法.