项目开发总结之通用适配器

public abstract class CommonAdapter<T> extends BaseAdapter {
    protected LayoutInflater mInflater;
    protected Context mContext;
    protected List<T> mDatas;
    protected SparseArray<T> sparseArray;
    protected final int mItemLayoutId;
    private int viewHeight;//整个item的高度

    public int getViewHeight() {
        return viewHeight;
    }

    public void setViewHeight(int viewHeight) {
        this.viewHeight = viewHeight;
    }

    public List<T> getmDatas() {
        return mDatas == null ? (List<T>) new ArrayList<>() : mDatas;
    }

    public void setmDatas(List<T> mDatas) {
        this.mDatas = mDatas;
    }

    private boolean isPositon;

    /**
     * 设置list
     *
     * @param list
     */
    public void setList(List<T> list) {
        if (list != null) {
            if (this.mDatas == null) {
                mDatas = list;
                this.notifyDataSetChanged();
                return;
            }
            if (this.mDatas.size() > 0) {
                this.mDatas.clear();
            }
            this.mDatas.addAll(list);
            this.notifyDataSetChanged();
        }
    }

    public void addList(List<T> list) {
        if (list != null && list.size() > 0) {
            this.mDatas.addAll(list);
            this.notifyDataSetChanged();
        }
    }

    /**
     * 添加一个对象
     *
     * @param data
     */
    public void addObject(T data) {
        if (!this.mDatas.contains(data)) {
            this.mDatas.add(data);
        }
        this.notifyDataSetChanged();
    }

    public CommonAdapter(Context context, List<T> mDatas, int itemLayoutId) {
        this.mContext = context;
        this.mInflater = LayoutInflater.from(mContext);
        this.mDatas = mDatas;
        this.mItemLayoutId = itemLayoutId;
    }

    public CommonAdapter(Context context, List<T> mDatas, int itemLayoutId, boolean isPositon) {
        this.mContext = context;
        this.mInflater = LayoutInflater.from(mContext);
        this.mDatas = mDatas;
        this.mItemLayoutId = itemLayoutId;
        this.isPositon = isPositon;
    }


    public CommonAdapter(Context context, SparseArray<T> sparseArray,
                         int itemLayoutId) {
        this.mContext = context;
        this.mInflater = LayoutInflater.from(mContext);
        this.sparseArray = sparseArray;
        this.mItemLayoutId = itemLayoutId;
    }

    @Override
    public int getCount() {
        if (mDatas != null) {

            return mDatas.size();
        } else {
            if (sparseArray != null)
                return sparseArray.size();
            return 0;
        }
    }

    @Override
    public T getItem(int position) {
        if (mDatas != null) {
            return mDatas.get(position);
        }
        return sparseArray.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder = getViewHolder(position, convertView,
                parent);

        if (isPositon) {
            convert(viewHolder, getItem(position), position);
        } else {
            convert(viewHolder, getItem(position));
        }
        if (viewHeight > 0) {
            ViewGroup.LayoutParams layoutParams = viewHolder.getConvertView().getLayoutParams();
            layoutParams.height = viewHeight;
            viewHolder.getConvertView().setLayoutParams(layoutParams);
        }
        return viewHolder.getConvertView();

    }

    public abstract void convert(ViewHolder helper, T item);

    public void convert(ViewHolder helper, T item, int position) {

    }

    private ViewHolder getViewHolder(int position, View convertView,
                                     ViewGroup parent) {
        return ViewHolder.get(mContext, convertView, parent, mItemLayoutId,
                position);
    }

}
public class ViewHolder {
    private final SparseArray<View> mViews;
    private int mPosition;
    private View mConvertView;


    private ViewHolder(Context context, ViewGroup parent, int layoutId,
                       int position) {
        this.mPosition = position;
        this.mViews = new SparseArray<View>();
        mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,
                false);
        // setTag
        mConvertView.setTag(this);
    }

    /**
     * 设置圆环
     *
     * @param itemId
     * @param percents
     * @param isHaveAnim
     * @return
     */
    public ViewHolder setAnimationView(int itemId, ArrayList percents, boolean isHaveAnim, int colors[]) {
        View view = getView(itemId);
        if (view instanceof CircleAnimationView) {
            CircleAnimationView circleAnimationView = getView(itemId);
            circleAnimationView.setIsHaveAnim(isHaveAnim);
            circleAnimationView.setColors(colors);
            circleAnimationView.setPercents(percents);
        }
        return this;
    }


    /**
     * 拿到一个ViewHolder对象
     *
     * @param context
     * @param convertView
     * @param parent
     * @param layoutId
     * @param position
     * @return
     */
    public static ViewHolder get(Context context, View convertView,
                                 ViewGroup parent, int layoutId, int position) {
        if (convertView == null) {
            return new ViewHolder(context, parent, layoutId, position);
        }
        return (ViewHolder) convertView.getTag();
    }


    public View getConvertView() {
        return mConvertView;
    }


    /**
     * 通过控件的Id获取对于的控件,如果没有则加入views
     *
     * @param viewId
     * @return
     */
    public <T extends View> T getView(int viewId) {
        View view = mViews.get(viewId);
        if (view == null) {
            view = mConvertView.findViewById(viewId);
            view.setVisibility(View.VISIBLE);
            mViews.put(viewId, view);
        }
        return (T) view;
    }


    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @param text
     * @return
     */
    public ViewHolder setText(int viewId, String text) {
        TextView view = getView(viewId);
        view.setText(text);
        return this;
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @param text
     * @param typeface 字体
     * @return
     */
    public ViewHolder setText(int viewId, String text, Typeface typeface) {
        TextView view = getView(viewId);
        view.setText(text);
        view.setTypeface(typeface);
        return this;
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @param colors
     * @return
     */
    public ViewHolder setTextColor(int viewId, int colors) {
        TextView view = getView(viewId);
        view.setTextColor(colors);
        return this;
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @return
     */
    public String getText(int viewId) {
        TextView view = getView(viewId);

        return view.getText().toString();
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @param firstStyleItem
     * @return
     */
    public ViewHolder setText(int viewId, List<TextStyleItem> firstStyleItem) {
        TextView view = getView(viewId);
        StyleBuilder styleBuilder = new StyleBuilder();
        if (firstStyleItem != null) {
            for (TextStyleItem textSyleItem : firstStyleItem
                    ) {
                styleBuilder.addStyleItem(textSyleItem);
            }
        }
        styleBuilder.show(view);
        return this;
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @return
     */
    public ViewHolder setTextMinWidth(int viewId, int width) {
        TextView view = getView(viewId);
        view.setMinWidth(width);
        return this;
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @param ischeck
     * @return
     */
    public ViewHolder setChecked(int viewId, boolean ischeck) {
        View view = getView(viewId);
        if (view instanceof CheckBox) {
            ((CheckBox) view).setChecked(ischeck);
        } else if (view instanceof RadioButton) {
            ((RadioButton) view).setChecked(ischeck);
        }
        return this;
    }

    /**
     * 获取check的值
     *
     * @param viewId
     * @return
     */
    public boolean getCheck(int viewId) {
        View view = getView(viewId);
        if (view instanceof CheckBox) {
            return ((CheckBox) view).isChecked();
        } else if (view instanceof RadioButton) {
            return ((RadioButton) view).isChecked();
        }
        return false;
    }


    /**
     * 为TextView设置tag
     *
     * @param viewId
     * @param text
     * @return
     */
    public ViewHolder setTag(int viewId, Object text) {
        TextView view = getView(viewId);
        view.setTag(text);
        return this;
    }

    public ViewHolder hideView(int viewId) {
        getView(viewId).setVisibility(View.GONE);
        return this;
    }


    public ViewHolder showView(int viewId) {
        getView(viewId).setVisibility(View.VISIBLE);
        return this;
    }


    /**
     * 设置动画
     *
     * @param viewId
     * @param animation
     * @return
     */
    public ViewHolder setAnim(int viewId, Animation animation) {
        View view = getView(viewId);
        view.startAnimation(animation);
        return this;
    }


    /**
     * 停止动画
     *
     * @param viewId
     * @param animation
     */
    public ViewHolder stopAnim(int viewId, Animation animation) {
        // TODO Auto-generated method stub
        View view = getView(viewId);
        view.clearAnimation();
        return this;
    }


    /**
     * 为View
     *
     * @param viewId
     * @param isVisible
     * @return
     */
    public ViewHolder setVisible(int viewId, boolean isVisible) {
        View view = getView(viewId);
        if (isVisible) {
            view.setVisibility(View.VISIBLE);
        } else {
            view.setVisibility(View.GONE);
        }

        return this;
    }

    public ViewHolder setVisible(int viewId, int isVisible) {
        View view = getView(viewId);
        if (isVisible == 1) {
            view.setVisibility(View.VISIBLE);
        } else if (isVisible == 2) {
            view.setVisibility(View.GONE);
        } else {
            view.setVisibility(View.INVISIBLE);
        }

        return this;
    }


    /**
     * 为TextView设置字符串,带颜色
     *
     * @param viewId
     * @param text
     * @return
     */
    public ViewHolder setText(int viewId, String text, int color) {
        TextView view = getView(viewId);
        view.setText(text);
        view.setTextColor(color);
        return this;
    }


    /**
     * 为ImageView设置图片
     *
     * @param viewId
     * @param drawableId
     * @return
     */
    public ViewHolder setImageResource(int viewId, int drawableId) {
        if (viewId != 0 && drawableId != 0) {
            View view = getView(viewId);
            if (view instanceof ImageView) {
                ((ImageView) view).setImageResource(drawableId);
            } else if (view instanceof ImageButton) {
                ((ImageButton) view).setImageResource(drawableId);
            }
        }
        return this;
    }

    public ViewHolder setBackgroundResource(int viewId, int drawableId) {
        if (viewId != 0 && drawableId != 0) {
            View view = getView(viewId);
            if (view instanceof TextView) {
                ((TextView) view).setBackgroundResource(drawableId);
            }
        }
        return this;
    }

    /**
     * 为ImageView设置图片
     *
     * @param viewId
     * @param drawableId
     * @return
     */
    public ViewHolder setImageResource(int viewId, String drawableId) {
        if (viewId != 0 && drawableId != null) {
            //得到可用的图片
            ImageOptions options = new ImageOptions.Builder().setUseMemCache(true)
                    . setCircular(false)
                    . setIgnoreGif(false)
                    .setFailureDrawableId(R.drawable.icon_normal)
                    .setLoadingDrawableId(R.drawable.icon_normal)
                    . setImageScaleType(ImageView.ScaleType.CENTER_CROP)    //以及其他方法
                    .build();
            View view = getView(viewId);
            if (view instanceof ImageView) {
                x.image().bind(((ImageView) view), drawableId,options);
            } else if (view instanceof ImageButton) {
                x.image().bind(((ImageButton) view), drawableId,options);
            }
        }
        return this;
    }

    public ViewHolder setImageResource(Context context, int viewId, String drawableId) {
        if (viewId != 0 && drawableId != null) {
            //得到可用的图片
            View view = getView(viewId);
            if (view instanceof ImageView) {
//                RequestOptions options = new RequestOptions()
//                        .centerCrop()
//                        .placeholder(R.drawable.icon_normal)
//                        .error(R.drawable.icon_normal)
//                        .priority(Priority.HIGH)
//                        .diskCacheStrategy(DiskCacheStrategy.NONE);

                Glide.with(context).load(drawableId)
//                        .apply(options)
                        .centerCrop()
                        .placeholder(R.drawable.icon_normal)
                        .error(R.drawable.icon_normal)
                        .priority(Priority.HIGH)
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
//                        .placeholder(R.drawable.icon_normal)
                        .into((ImageView) view);


            } else if (view instanceof ImageButton) {
//                RequestOptions options = new RequestOptions()
//                        .centerCrop()
//                        .placeholder(R.drawable.icon_normal)
//                        .error(R.drawable.icon_normal)
//                        .priority(Priority.HIGH)
//                        .diskCacheStrategy(DiskCacheStrategy.NONE);
                Glide.with(context).load(drawableId)
//                        .apply(options)
                        .centerCrop()
                        .placeholder(R.drawable.icon_normal)
                        .error(R.drawable.icon_normal)
                        .priority(Priority.HIGH)
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
                        .into((ImageButton) view);
            }
        }
        return this;
    }

    /**
     * 为ImageView设置图片
     *
     * @param viewId
     * @return
     */
    public ViewHolder setViewHeight(int viewId, int height) {
        if (viewId != 0 && height != 0) {
            //得到可用的图片
            View view = getView(viewId);
            ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
            layoutParams.height = height;
            view.setLayoutParams(layoutParams);
        }
        return this;
    }


    /**
     * 为ImageView设置图片
     *
     * @param viewId
     * @param drawableId
     * @return
     */
    public ViewHolder setImageResource(int viewId, String drawableId, ImageOptions imageOptions) {
        if (viewId != 0 && drawableId != null) {
            View view = getView(viewId);
            if (view instanceof ImageView) {
                x.image().bind(((ImageView) view), drawableId, imageOptions);
            } else if (view instanceof ImageButton) {
                x.image().bind(((ImageButton) view), drawableId, imageOptions);
            }
        }
        return this;
    }

    /**
     * 为View设置图片
     *
     * @param viewId
     * @param drawableId
     * @return
     */
    public ViewHolder setBackgroundBg(int viewId, int drawableId) {
        if (viewId != 0 && drawableId != 0) {
            View view = getView(viewId);
            if (view == null) {
                return this;
            }
            view.setBackgroundResource(drawableId);
        }
        return this;
    }

    /**
     * 为View设置是否可点击
     *
     * @param viewId
     * @param isClicked
     * @return
     */
    public ViewHolder setOnClicked(int viewId, boolean isClicked) {
        if (viewId != 0) {
            View view = getView(viewId);
            if (view == null) {
                return this;
            }
            view.setClickable(isClicked);
        }
        return this;
    }


    /**
     * 为ImageView设置图片
     *
     * @param viewId
     * @param bm
     * @return
     */
    public ViewHolder setImageBitmap(int viewId, Bitmap bm) {
        ImageView view = getView(viewId);
        view.setImageBitmap(bm);
        return this;
    }

    /**
     * 为View设置点击事件
     *
     * @param viewId
     * @param onClickListener
     * @return
     */
    public ViewHolder setViewOnclick(int viewId, OnClickListener onClickListener) {
        View view = getView(viewId);
        view.setOnClickListener(onClickListener);
        return this;
    }


    /**
     * 为View check
     *
     * @param viewId
     * @return
     */
    public ViewHolder setViewOnCheckChangeListener(int viewId, CompoundButton.OnCheckedChangeListener onCheckedChangeListener) {
        View view = getView(viewId);
        if (view instanceof RadioButton) {
            ((RadioButton) view).setOnCheckedChangeListener(onCheckedChangeListener);
        } else if (view instanceof CheckBox) {
            ((CheckBox) view).setOnCheckedChangeListener(onCheckedChangeListener);
        }

        return this;
    }

    /**
     * 为View设置长按点击事件
     *
     * @param viewId
     * @param longClickListener
     * @return
     */
    public ViewHolder setViewOnclick(int viewId, OnLongClickListener longClickListener) {
        View view = getView(viewId);
        view.setOnLongClickListener(longClickListener);
        return this;
    }


    public int getPosition() {
        return mPosition;
    }

}

注:本文代码是他人总结,故标记为转载,仅供参考学习。

猜你喜欢

转载自blog.csdn.net/youngmy5/article/details/78060374