封裝一個ListView萬能適配器

剛開始接觸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;
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章