关于LayoutInflater的错误用法(警告提示:Avoid passing null as the view root)

项目中用LayoutInflater加载xml布局一直飘黄警告,上网搜了搜发现没有解释明白的,到是找到了一篇外国的博文,但是竟然是英文。。。幸好以前上学时候的英语不是很差加上谷歌的辅助,简单翻一下! 
原文地址:http://www.cnblogs.com/kobe8/p/3859708.html 
参考博客:http://blog.csdn.net/ccfcccfc/article/details/40984971

错误用法:

inflater.inflate(R.layout.my_layout, null);

加载xml布局常用的有这两个方法:

inflate(int resource, ViewGroup root) 
resource:将要加载的xml布局 
root:指定“将要加载的xml布局”的“根布局”

inflate(int resource, ViewGroup root, boolean attachToRoot) 
attachToRoot:是否将解析xml生成的view加载到“根布局”中

注意:这里的参数root的设置很关键,会影响到xml解析生成的view;如果设置成null即没有指定“根布局”的话,xml的最外层根布局设置的Android:layout_xxx等属性不会生效,因为android:layout_xxx等属性是在根布局中获得的;

第三个参数如果设置为:true,表示xml布局会被解析并加载到“根布局”中,如果为false,则会生成一个view并且不会加载到根布局中,但是这个view的类型取决于第二个参数根布局的类型,所以如果xml布局中如果设置了一些根布局类型中不存在的属性则不会有效果。下边是一个例子: 
布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="50dp"    android:layout_margin="50dp"    android:gravity="center"    android:orientation="horizontal" >    <TextViewandroid:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="TextView1" />    <TextViewandroid:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="TextView2" /></LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

如果你的adapter中加载布局写成这样即不指定“根布局”: 
LayoutInflater.from(context).inflate(R.layout.list_item, null); 
运行效果 
 
发现 
android:layout_height=”50dp” 
android:layout_margin=”50dp” 
这两句代码没有效果,这是因为没有指定根布局,所以根布局里设置的android:layout_xxx等属性并没有起作用; 
如果将adapter中加载布局代码改为:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(
                R.layout.list_item, parent, false);
    }     

    return convertView;
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行效果: 
 
我们发现android:layout_height=”50dp” 已经有效果了 
但是layout_margin没有起作用,这是因为我们上边设置的“根布局”是ViewGroup,他不能识别layout_margin属性,在线性布局里才会有这个属性。 
如果将adapter中改为:

layout=(LinearLayout)findViewById(R.id.layout1);
View view=LayoutInflater.from(this).inflate(R.layout.list_item,layout , false);
        layout.addView(view);  
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

最终运行效果会发现 
android:layout_height, android:layout_margin都已经有效果了。

来源: http://blog.csdn.net/qq_26263231/article/details/54137624

来自为知笔记(Wiz)

时间: 2024-11-07 14:57:59

关于LayoutInflater的错误用法(警告提示:Avoid passing null as the view root)的相关文章

LayoutInflate: Avoid passing null as the view root

今天使用LayoutInflate.inflate()方法加载一个布局,当参数root 为null 时,出现下列提示 Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element) 解决方案: 1. 添加: @SuppressLint("InflateParams") 2. 修改成 view = View.inflate(con

ABBYY FineReader出现错误和警告提示的解决办法

识别结果的质量取决于多种因素,这些因素包括原始文档的质量.结构布局和文档导出参数等.在使用ABBYY FineReader Pro for Mac OCR文字识别软件处理文档的各个阶段,应用程序均可能会显示错误消息或警告,具体消息或警告取决于实际情况.根据这些消息或警告提供的建议进行操作,可以获得高质量的识别结果.避免繁琐的编辑过程. 如何查看错误和警告 "警告"面板列出了所有错误和警告: 如果看到的消息要求你处理原始图像: 在分析文档结构之前,应用程序会自动预处理图像(如果未禁用相应

ja获取Unsafe类的实例和取消eclipse编译的错误和警告

JRE的rt.jar中提供了一个类sun.misc.Unsafe,虽然这个类因为其不其安全性,不建议使用,而且被加了诸多限制:但 是在很多场合下我们确实需要这个类提供的强大功能.JDK类库下的NIO和concurrent包下的很多类都使用到了Unsafe 类,如AtomicInteger和AbstractQueuedSynchronizer等. JDK源码中对这个类进行了严格限制,我们不能通过常规new的方式去获取该类的实例,也不能通过Unsafe.getUnsafe ()来获取实例.但是我们可

odoo开发笔记 -- 错误、警告、提示、确认信息显示

1.检查业务逻辑中的错误,终止代码执行,显示错误或警告信息: raise osv.except_osv(_('Error!'), _('Error Message.')) 示例代码: #删除当前销售单,需要验证销售单的状态 def unlink(self, cr, uid, ids, context=None): for rec in self.browse(cr, uid, ids, context=context): if rec.state not in ['draft']: raise

Xcode编译错误和警告汇总&lt;转&gt;

1.error: macro names must be identifiers YourProject_prefix.pch 原因: 因为你弄脏了预处理器宏,在它处于<Multiple Values>的时候修改了它 解决方法: Configiration选择All Configirations,清空它 然后分别重新定义你的Debug,Release,Distributin预处理器宏吧 2.warning: no rule to process file '$(PROJECT_DIR)/Loa

ios开发——开发总结篇&amp;开发中常见错误和警告总结(五)

开发中常见错误和警告总结(五) 一.Missing file xxx 如果你在finder中删除了工程里面的文件,xcode上会出现一个警告,Missing file xxx, 有个警告在那恨事不自在.上网着了下,发现了如下解决方法: 1.打开terminal, cd 到刚才你删除的文件的文件夹,就是xcode提示你missing的文件夹 2.执行 svn delete missFileName  二.LLVM GCC Warning 4.3默认使用的是ARC编译,不是原来的GCC编译,所以你编

Android中关于在onDrow或者onMeasure中创建对象提示Avoid object allocations during draw/layout operations (preallocate and reuse instead) 问题

在实际开发中Android中自带的控件有时无法满足我们的需求,这时就需要我们重写控件来实现我们想要的功能. 还有个关于UI体验的问题,就是在onDraw()函数中最好不要去创建对象,否则就提示下面的警告信息:因为onDraw()调用频繁,不断进行创建和垃圾回收会影响UI显示的性能 例如: protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint mpatin = new Paint(); mpatin.setTextAl

C语言程序的错误和警告

一段C语言代码,在编译.链接和运行的各个阶段都可能会出现问题.编译器只能检查编译和链接阶段出现的问题,而可执行程序已经脱离了编译器,运行阶段出现问题编译器是无能为力的. 如果我们编写的代码正确,运行时会提示没有错误(Error)和警告(Warning),如下图所示: 图1:Dev C++ 的提示 图2:VC 6.0 的提示 图3:C-Free 5.0 的提示 对于 VS.GCC.Xcode 等,如果代码没有错误,它们只会显示“生成成功”,不会显示“0个错误,0个警告”,只有代码真的出错了,它们才

C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程中执行.最终目标是,继承的业务逻辑类外部调用时有两个接口可选,调用syncRun同步执行:调用由引擎自动生成的asyncRun就异步执行.最终自动生成asyncRun的模板基类没能实现,主要原因是mingw对this处理的太有问题了!!原本以为编译器问题,后来才知道成员函数指针和this指针如此特殊