遇到的Fragment中使用setAdapter()设置ListView报空指针解决方案
场景是这样,底部4个tab导航栏。用的fragment。
但其中一个fragmentActivity1中使用ListVIew的setAdapter()方法时,总是报NullPointerException错误。
一整天都没有解决,晚上看国外的论坛上,看到对于ListView的深入讲解,才忽然理解了问题所在。
对于ListView,刚开始写应用的时候都是拿来就用,没有深入了解过它的本质。从博友上摘下来一段话:
一个ListView通常有两个职责。
(1)将数据填充到布局。
(2)处理用户的选择点击等操作。
第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非常简单。
一个ListView的创建需要3个元素。
(1)ListView中的每一列的View。
(2)填入View的数据或者图片等。
(3)连接数据与ListView的适配器。
也就是说,要使用ListView,首先要了解什么是适配器。适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与AdapterView的分离设置。
上面这段话很重要,这就是ListView的本质。
也就是说,实际工作中,要让ListView工作,一般应该包含4部分:
1,声明ListView的布局文件:如index_order.xml
2,用来装内容的布局文件:如index_order_listview.xml
3,填充index_order_listview.xml的数据,图片、文字等,通常是一ArrayList<HashMap<String,Object>>数组
4,将数据和布局文件融合到一起的适配器。我将其理解为一个方法,如setAdapter()。
理解了上面的部分,我们再来说报空指针NullPointerException的问题。
我们直接上执行代码:
SimpleAdapter adapter = new SimpleAdapter(this.getActivity(), res,R.layout.index_order_listview,
new String[]{"order_id"},
new int[]{R.id.order_id}
);
上面的代码中,res为ArrayList<>数组,我相信大家都无数次打印过,确保它是有值的。那么,再看执行的时候:
orderListView.setAdapter(adapter);
我的代码中,事先申明了private ListView orderListView,也就是这一步报NullPointerException错误。
如果大家理解了上面刚才关于ListView本质的说法,那么应该很明显地注意到,这里的问题是没有取得orderListView的id。需要加下如下的代码:
orderListView = (ListView)this.getActivity().findViewById(R.id.orderListView);
R.id.orderListView是定义在ListView的布局文件里面。
也就是说,一般情况下,ListView正常工作应该是要有两个布局文件。一个总文件用来装View,如index_order.xml,一个就是View(用来装内容,可以无限重复,如index_order_listview.xml)。
大家一般都只注意程序,而很少注意到布局也会造成应用的运行失败。
遇到的Fragment中使用setAdapter()设置ListView报空指针解决方案的更多相关文章
- React中input框设置value报错解析
react input 不设置onChange的常见错误截图 表单是前端非常重要的一块内容,并且往往包含了错误校验等逻辑. React对表单元素做了专门的优化处理,他对表单元素做了一些抽象,使得他们 ...
- MainActivity获取fragment控件button监听报空指针错误
原因是是新版SDK创建项目时默认引入的fragment.xml,我的button是定义在fragment.xml里面的,而findviewbyid却是在main.activity里面调用的,而这样是获 ...
- C#中SQL参数传入空值报错解决方案
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value. 注意:SQL参数是不能接受C#的null值的,传入null就会报错. 下面我们看个例子: ...
- c# 第七节 编程规范,vs中的各种设置
本节内容: 1:编程规范 2:vs中的各种设置 3:一个解决方案多个项目的创建.使用 1:编程规范 需要规范的地方: 1: 2: 2:vs中的各种设置 实现: 3:一个解决方案多个项目的创建.使用
- 实现ScrollView中包含ListView,动态设置ListView的高度
ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...
- android,在fragment中使用listview,不使用listfragment
public class LeftFragment extends Fragment{ private ListView listView; @Override public View onCreat ...
- android中设置ListView的选中的Item的背景颜色
ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的. 1.配置main.xml <? ...
- 在Fragment中加一个嵌套了ListView的ScrollView(一)
首先介绍一下这个程序的功能: 1.顶部有两个可以切换Fragment的Button 2.在其中一个Fragment中里有个ScrollView,ScrollView中有ViewFlipper,List ...
- Fragment中添加ListView而不使用ListFragment
最初的构想是,将Fragment和ViewPager结合起来, 然后突发奇想,在第一个Fragment里添加了ListView, 依照网上的建议,extends了ListFragment,接着各种报错 ...
随机推荐
- 【转】图文并茂 Ubuntu使用Thunderbird方法指南
原文网址:http://os.51cto.com/art/201101/243445.htm Ubuntu 是一个启动速度超快.界面友好.安全性好的操作系统,它适用于桌面电脑.笔记本电脑.服务器以及上 ...
- Hdu5785-Interesting(回文串处理)
Problem Description Alice get a string S. She thinks palindrome string is interesting. Now she wanna ...
- 让 SpringMVC 接收多个对象的4种方法
问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:表单提交,以字段数组接收: 第2种方 ...
- Java中ThreadLocal无锁化线程封闭实现原理
虽然现在可以说很多程序员会用ThreadLocal,但是我相信大多数程序员还不知道ThreadLocal,而使用ThreadLocal的程序员大多只是知道其然而不知其所以然,因此,使用ThreadLo ...
- hadoop深入研究:(十六)——Avro序列化与反序列化
转载请写明来源地址:http://blog.csdn.net/lastsweetop/article/details/9773233 所有源码在github上,https://github.com/l ...
- python3-day2(基本回顾)
1.作用域 1>外层变量可以被内层变更使用 2>内层变更不可以被外层使用 global nonlocal 2.对于Python,一切事物都是对象,对象基于类创建 3.练习 有如下值集合 [ ...
- python高级编程之选择好名称:命名指南
# # -*- coding: utf-8 -*- # # python:2.x # __author__ = 'Administrator' #命名指南 #一组常用的命名规则可以被应用到变量,方法函 ...
- 用CSS/CSS3 实现 水平居中和垂直居中的完整攻略
水平居中:行内元素解决方案 只需要把行内元素包裹在一个属性display为block的父层元素中,并且把父层元素添加如下属性即可: .parent { text-align:center; } 水 ...
- (HYSBZ)BZOJ 1588 营业额统计
营业额统计 Time Limit: 5000MS Memory Limit: 165888KB 64bit IO Format: %lld & %llu Description 营业额 ...
- HDU 4122 Alice's mooncake shop (单调队列/线段树)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4122 题意:好难读懂,读懂了也好难描述,亲们就自己凑合看看题意把 题解:开始计算每个日期到2000/1/ ...