Android开发遇到的问题----自定义RecyclerView Adapter Item 显示不全

封装RecyclerViewHolder

//万能的ViewHolder
public class CommomViewHolder extends RecyclerView.ViewHolder {

    //子View集合 SparseArray 高性能存储View
    private SparseArray mViews;
    //布局
    private View mContentView;
    private LayoutInflater mInflater;

    public CommomViewHolder(@NonNull View itemView) {
        super(itemView);
        mViews = new SparseArray<>();
        //通过它即可 findviewById
        mContentView = itemView;
    }

    //实现itemView  获取CommomViewHolder实体
    public static CommomViewHolder getViewHolder(ViewGroup parent,int layoutId){
        return new CommomViewHolder(View.inflate(parent.getContext(),layoutId,null));
    }

    //提供给外部访问View 的方法
    public  T getView(int viewId){
        View view = mViews.get(viewId);
        if(view == null){
            view = mContentView.findViewById(viewId);
            mViews.put(viewId,view);
        }
        return (T) view;
    }

    //设置文本
    public CommomViewHolder setText(int viewId, String text) {
        TextView tv = getView(viewId);
        tv.setText(text);
        return this;
    }

    //设置图片链接
    public CommomViewHolder setImageUrl(Context mContext, int viewId, String url) {
        ImageView iv = getView(viewId);
        GlideHelper.loadUrl(mContext, url, iv);
        return this;
    }

    //设置图片链接
    public CommomViewHolder setImage(Context mContext, int viewId, String imString) {
        ImageView iv = getView(viewId);
        UtilTools.getImageToString(imString,iv);
        return this;
    }

    //压缩
    public CommomViewHolder setImageUrl(Context mContext, int viewId, String url, int w, int h) {
        ImageView iv = getView(viewId);
       // GlideHelper.loadSmollUrl(mContext, url, w, h, iv);
        return this;
    }

    //设置图片文件
    public CommomViewHolder setImageFile(Context mContext, int viewId, File file) {
        ImageView iv = getView(viewId);
       // GlideHelper.loadFile(mContext, file, iv);
        return this;
    }




    //设置图片
    public CommomViewHolder setImageResource(int viewId, int resId) {
        ImageView iv = getView(viewId);
        iv.setImageResource(resId);
        return this;
    }

    //设置背景颜色
    public CommomViewHolder setBackgroundColor(int viewId, int color) {
        ImageView iv = getView(viewId);
        iv.setBackgroundColor(color);
        return this;
    }

    //设置文本颜色
    public CommomViewHolder setTextColor(int viewId, int color) {
        TextView tv = getView(viewId);
        tv.setTextColor(color);
        return this;
    }

    //设置控件的显示隐藏
    public CommomViewHolder setVisibility(int viewId, int visibility) {
        TextView tv = getView(viewId);
        tv.setVisibility(visibility);
        return this;
    }
}

该ViewHolder进行试验 app 显示的Item 是这样的 显示不全

Android开发遇到的问题----自定义RecyclerView Adapter Item 显示不全_第1张图片

 

出现问题的代码定位

   //实现itemView  获取CommomViewHolder实体
    public static CommomViewHolder getViewHolder(ViewGroup parent,int layoutId){
        return new CommomViewHolder(View.inflate(parent.getContext(),layoutId,null));
    }

是因为Item的View 没有依附到parent之上

 

将上面代码修改为

    //实现itemView  获取CommomViewHolder实体
    public static CommomViewHolder getViewHolder(ViewGroup parent,int layoutId){
        return new CommomViewHolder( LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false));
    }

就开始正常显示Item

Android开发遇到的问题----自定义RecyclerView Adapter Item 显示不全_第2张图片

 

 

 

你可能感兴趣的:(Android开发遇到问题)