zoukankan      html  css  js  c++  java
  • android 设计模式

    adaper 的工厂模式

    baseAdapter:

    public abstract class AdapterBase<T> extends BaseAdapter {
        protected List<T> mList = new LinkedList<T>();
        protected Context mContext;
        protected int mItemLayoutId;
    
        public List<T> getList() {
            return mList;
        }
    
        public void appendToList(List<T> list) {
            if (list == null) {
                return;
            }
            mList.addAll(list);
            notifyDataSetChanged();
        }
    
        public void appendToTopList(List<T> list) {
            if (list == null) {
                return;
            }
            mList.addAll(0, list);
            notifyDataSetChanged();
        }
    
        public void initAdp(Context mContext, List<T> list, int mItemLayoutId) {
            if (list == null) {
                return;
            }
            this.mList = list;
            this.mContext = mContext;
            this.mItemLayoutId = mItemLayoutId;
            notifyDataSetChanged();
        }
    
        public void clear() {
            mList.clear();
            notifyDataSetChanged();
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mList.size();
        }
    
        @Override
        public T getItem(int position) {
            // TODO Auto-generated method stub
            if (position > mList.size() - 1) {
                return null;
            }
            return mList.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            final ViewHolder viewHolder = getViewHolder(position, convertView,
                    parent);
            convertView(viewHolder, getItem(position));
            return viewHolder.getConvertView();
        }
    
        private ViewHolder getViewHolder(int position, View convertView,
                ViewGroup parent) {
            return ViewHolder.get(mContext, convertView, parent, mItemLayoutId,
                    position);
        }
    
        public abstract void convertView(ViewHolder helper, T item);
    
    }
    View Code


    牛逼哄哄的viewHolder:

    public class ViewHolder {
        private SparseArray<View> mViews;
        private int mPosition;
        private View mConvertView;
        private Context mContext;
        private int mLayoutId;
    
        public ViewHolder(Context context, ViewGroup parent, int layoutId,
                int position) {
            mContext = context;
            mLayoutId = layoutId;
            this.mPosition = position;
            this.mViews = new SparseArray<View>();
            mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,
                    false);
            mConvertView.setTag(this);
        }
    
        public static ViewHolder get(Context context, View convertView,
                ViewGroup parent, int layoutId, int position) {
            if (convertView == null) {
                return new ViewHolder(context, parent, layoutId, position);
            } else {
                ViewHolder holder = (ViewHolder) convertView.getTag();
                holder.mPosition = position;
                return holder;
            }
        }
    
        public int getPosition() {
            return mPosition;
        }
    
        public int getLayoutId() {
            return mLayoutId;
        }
    
        /**
         * 通过viewId获取控件
         * 
         * @param viewId
         * @return
         */
        @SuppressWarnings("unchecked")
        public <T extends View> T getView(int viewId) {
            View view = mViews.get(viewId);
            if (view == null) {
                view = mConvertView.findViewById(viewId);
                mViews.put(viewId, view);
            }
            return (T) view;
        }
    
        public View getConvertView() {
            return mConvertView;
        }
    
        /**
         * 设置TextView的值
         * 
         * @param viewId
         * @param text
         * @return
         */
        public ViewHolder setText(int viewId, String text) {
            TextView tv = getView(viewId);
            tv.setText(text);
            return this;
        }
    
        public ViewHolder setImageResource(int viewId, int resId) {
            ImageView view = getView(viewId);
            view.setImageResource(resId);
            return this;
        }
    
        public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
            ImageView view = getView(viewId);
            view.setImageBitmap(bitmap);
            return this;
        }
    
        public ViewHolder setImageDrawable(int viewId, Drawable drawable) {
            ImageView view = getView(viewId);
            view.setImageDrawable(drawable);
            return this;
        }
    
        public ViewHolder setBackgroundColor(int viewId, int color) {
            View view = getView(viewId);
            view.setBackgroundColor(color);
            return this;
        }
    
        public ViewHolder setBackgroundRes(int viewId, int backgroundRes) {
            View view = getView(viewId);
            view.setBackgroundResource(backgroundRes);
            return this;
        }
    
        public ViewHolder setTextColor(int viewId, int textColor) {
            TextView view = getView(viewId);
            view.setTextColor(textColor);
            return this;
        }
    
        public ViewHolder setTextColorRes(int viewId, int textColorRes) {
            TextView view = getView(viewId);
            view.setTextColor(mContext.getResources().getColor(textColorRes));
            return this;
        }
    
        public ViewHolder setAlpha(int viewId, float value) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                getView(viewId).setAlpha(value);
            } else {
                // Pre-honeycomb hack to set Alpha value
                AlphaAnimation alpha = new AlphaAnimation(value, value);
                alpha.setDuration(0);
                alpha.setFillAfter(true);
                getView(viewId).startAnimation(alpha);
            }
            return this;
        }
    
        public ViewHolder setVisible(int viewId, boolean visible) {
            View view = getView(viewId);
            view.setVisibility(visible ? View.VISIBLE : View.GONE);
            return this;
        }
    
        public ViewHolder linkify(int viewId) {
            TextView view = getView(viewId);
            Linkify.addLinks(view, Linkify.ALL);
            return this;
        }
    
        public ViewHolder setTypeface(Typeface typeface, int... viewIds) {
            for (int viewId : viewIds) {
                TextView view = getView(viewId);
                view.setTypeface(typeface);
                view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
            }
            return this;
        }
    
        public ViewHolder setProgress(int viewId, int progress) {
            ProgressBar view = getView(viewId);
            view.setProgress(progress);
            return this;
        }
    
        public ViewHolder setProgress(int viewId, int progress, int max) {
            ProgressBar view = getView(viewId);
            view.setMax(max);
            view.setProgress(progress);
            return this;
        }
    
        public ViewHolder setMax(int viewId, int max) {
            ProgressBar view = getView(viewId);
            view.setMax(max);
            return this;
        }
    
        public ViewHolder setRating(int viewId, float rating) {
            RatingBar view = getView(viewId);
            view.setRating(rating);
            return this;
        }
    
        public ViewHolder setRating(int viewId, float rating, int max) {
            RatingBar view = getView(viewId);
            view.setMax(max);
            view.setRating(rating);
            return this;
        }
    
        public ViewHolder setTag(int viewId, Object tag) {
            View view = getView(viewId);
            view.setTag(tag);
            return this;
        }
    
        public ViewHolder setTag(int viewId, int key, Object tag) {
            View view = getView(viewId);
            view.setTag(key, tag);
            return this;
        }
    
        public ViewHolder setChecked(int viewId, boolean checked) {
            Checkable view = (Checkable) getView(viewId);
            view.setChecked(checked);
            return this;
        }
    
        /**
         * 关于事件的
         */
        public ViewHolder setOnClickListener(int viewId,
                View.OnClickListener listener) {
            View view = getView(viewId);
            view.setOnClickListener(listener);
            return this;
        }
    
        public ViewHolder setOnTouchListener(int viewId,
                View.OnTouchListener listener) {
            View view = getView(viewId);
            view.setOnTouchListener(listener);
            return this;
        }
    
        public ViewHolder setOnLongClickListener(int viewId,
                View.OnLongClickListener listener) {
            View view = getView(viewId);
            view.setOnLongClickListener(listener);
            return this;
        }
    }
    View Code


    这样就是实现了真正的工厂模式的adapter

  • 相关阅读:
    老王学jsp之javabean与表单
    老王学jsp之http500错误
    老王学jsp之session
    转 Fiddler抓取HTTPS
    PHP 大型网站优化 大数据大并发大流量
    大流量、高并发的网站的底层系统架构
    大流量、高并发Web系统搭建(单机到分布式集群)
    Failed to start Load Kernel Modules
    ubuntu 16.04 我的任务栏呢 怎么只剩下桌面了
    跳坑日志之腾讯服务器不见了
  • 原文地址:https://www.cnblogs.com/yujian-bcq/p/4809728.html
Copyright © 2011-2022 走看看