app的listView排版一直出错

在设置ListView时遇到格式问题,经过排查发现是LayoutInflater.inflate()函数参数使用不当。了解到LayoutInflater的作用是将XML布局转换为View对象,区别于setContentView()。正确做法是将inflate的第二个参数设为null。

在这里插入图片描述

设置ListView时一直格式不对,xml的布局文件肯定是没错的

后来找了一下午,终于找到错在哪里了!!

接下来,找不同环节

       if (convertView == null) {
                mViewHolder = new ViewHolder();
                convertView = LayoutInflater.from(context).inflate(R.layout.item_app_info, null);
                mViewHolder.r1_item = convertView.findViewById(R.id.rl_item);
                mViewHolder.alpha = convertView.findViewById(R.id.item_app_alpha);
                mViewHolder.item_app_icon = (ImageView) convertView.findViewById(R.id.item_app_icon);
                mViewHolder.item_app_name = (TextView) convertView.findViewById(R.id.item_app_name);
                mViewHolder.item_app_avatar = convertView.findViewById(R.id.item_app_avatar);
                convertView.setTag(mViewHolder);
            }else {
                mViewHolder = (ViewHolder) convertView.getTag();
            }

if(convertView == null){
        mViewHolder =  new ViewHolder();
        convertView = LayoutInflater.from(context).inflate(R.layout.item_app_info, parent, false);

        //findViewById
        mViewHolder.re_item = convertView.findViewById(R.id.rl_item);
        mViewHolder.alpha = convertView.findViewById(R.id.item_app_alpha);
        mViewHolder.item_app_icon = (ImageView) convertView.findViewById(R.id.item_app_icon);
        mViewHolder.item_app_name = (TextView) convertView.findViewById(R.id.item_app_name);
        mViewHolder.item_app_avatar = convertView.findViewById(R.id.item_app_avatar);
        convertView.setTag(mViewHolder);
  }else {
        mViewHolder = (ViewHolder) convertView.getTag();
  }

上面两端代码都是适配器的getView函数里面的

LayoutInflater.inflate这个函数的参数都是什么意思呢?这个函数的作用是什么呢?

LayoutInflater的作用是将layout的xml布局文件实例化为View类对象,即,LayoutInflater的inflate函数就相当于将一个xml中定义的布局找出来,变成一个实例以供使用。

setContentView和inflate的区别
setContentView一旦调用,layout就会立刻显示UI;而inflate只会把layout形成一个以view类实现成的对象,有需要时再用setContentView显示出来。

一般在Activity中通过setContentView将界面显示出来,但是如果在非Activity中如何对控件布局设置操作,就需要LayoutInflater动态加载。

获取LayoutInflater的方法有如下三种:

LayoutInflater inflater = LayoutInflater.from(context);
View layout = inflater.inflate(R.layout.main, null);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.main, null);
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.main, null);

LayoutInflater类inflate(int Resource, ViewGroup root, boolean attachToRoot)方法三个参数的含义
在这里插入图片描述
https://blog.youkuaiyun.com/Sacredness/article/details/88684527

当然,我的出错的改正是:设置inflate的第二个参数为null即可
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值