BaseAdapter的最簡單的封裝

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

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

封裝的代碼:

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);
        }
    }
    }

在使用的時候直接繼承封裝好的adapter在這里只需要復(fù)寫getView()這一個方法就可以了.如果需要多個adapter這樣的話寫起來會少寫很多.

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容