Android开发中自定义RecyclerView Adapter Item显示不全

在Android开发中遇到RecyclerView Adapter的Item显示不全的问题,通过对ViewHolder的封装和代码定位,发现Item的View未正确依附到parent。通过修改代码,成功解决了Item显示不全的故障,现在显示恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装RecyclerViewHolder

//万能的ViewHolder
public class CommomViewHolder extends RecyclerView.ViewHolder {
 
    //子View集合 SparseArray 高性能存储View
    private SparseArray<View> 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 extends View> 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 是这样的
在这里插入图片描述

出现问题的代码定位

   //实现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));
    }

显示正常
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值