先入正题:LayoutInflate.inflate()方法报空指针错误大体有两个原因:
1.layoutInflate对象为空,或layoutInflate所依赖的Context对象为空
2.inflate()参数中的布局文件有错,导致XmlPullParser对象无法正确的解析布局文件
根据以上的两点原因,就可以根据Log信息来追踪错误的真正原因了。像我这个花费了我一上午才找到的错误:
根据Log信息我们可以知道是有空指针错误,并且知道错误发生在Adpter中,并且具体发生位置是在Android的LayoutInflate类对象中, 再看第一句就知道这是xml有问题(这是我血与泪的教训啊,那就是错误Log的第一句真的很重要)。刚开始我一直在跟踪我的对象的取值情况,这是个体力活啊!耗时!,到后来我跟踪源码,也是几经曲折,最后还是经大神提点,才知道是xml布局有问题。不过在跟踪源码的过程中,我对LayouInflate的原理也有了一定的了解。
layoutInflate对象有三种获取实例的方法:
- LayoutInflate.from(Context context)
- getLayoutInflate() 调用activity的方法
- (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
其实这三种方法都是一种,本质上都是第三种方法的封装罢了。而inflate()方法也有四种不同参数的方法:
1. public View inflate(int resource, ViewGroup root)
2. public View inflate(int resource, ViewGroup root, boolean attachToRoot)
3. public View inflate(XmlPullParser parser, ViewGroup root)
4. public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)
最后也都是运用XmlPullParser解析布局文件