BaseAdapter的最簡(jiǎn)單的封裝

前一段時(shí)間在網(wǎng)上找了一個(gè)demo,里面有很多封裝的類,仔細(xì)看了其中的幾個(gè),對(duì)封裝又有了多一點(diǎn)的認(rèn)識(shí)和理解.在最近做項(xiàng)目的過程中居然還利用到了,在學(xué)習(xí)的時(shí)候老師一直強(qiáng)調(diào)要我們學(xué)會(huì)封裝,那個(gè)時(shí)候只會(huì)跟著老師做或是在網(wǎng)上找demo照著demo做,沒想到這次在項(xiàng)目中自己也能做一個(gè)簡(jiǎn)單的封裝,雖然是一個(gè)很簡(jiǎn)單的封裝,但也算是一點(diǎn)小小的進(jìn)步吧.

在做項(xiàng)目時(shí)listview可以說是最常用的一個(gè)組件了,在使用時(shí)需要一個(gè)adapter.在項(xiàng)目中也不可能只寫一個(gè)listview,經(jīng)常遇到的情況是有很多的頁面都需要用listview來顯示數(shù)據(jù),在adapter中有很多的方法都是重復(fù)的,只有ViewHolder是根據(jù)不同的頁面它的方法是不同的,所以在封裝的時(shí)候只要把ViewHolder拿出來在需要的時(shí)候重寫,其他的幾個(gè)方法都可以封裝起來.

封裝的代碼:

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ù)寫getView()這一個(gè)方法就可以了.如果需要多個(gè)adapter這樣的話寫起來會(huì)少寫很多.

寫出來之后再看,其實(shí)也不時(shí)很難,當(dāng)時(shí)就是不會(huì),搞不懂這個(gè)getView()方法怎么單獨(dú)拿出來,現(xiàn)在看來,就是當(dāng)時(shí)對(duì)抽象類的不理解,不知道在抽象類里可以不用全部復(fù)寫父類的方法.

經(jīng)驗(yàn):想要對(duì)各個(gè)知識(shí)點(diǎn)理解的更透徹還是要多看demo,多看看別人都是怎么寫的,為什么這么寫,遇到?jīng)]見過的知識(shí)點(diǎn)或是模糊的地方再去認(rèn)真細(xì)究,通過這種方法既能加深理解,又能學(xué)會(huì)如何使用.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容