场景是这样,底部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报空指针解决方案的更多相关文章

  1. React中input框设置value报错解析

    react input 不设置onChange的常见错误截图 表单是前端非常重要的一块内容,并且往往包含了错误校验等逻辑.  React对表单元素做了专门的优化处理,他对表单元素做了一些抽象,使得他们 ...

  2. MainActivity获取fragment控件button监听报空指针错误

    原因是是新版SDK创建项目时默认引入的fragment.xml,我的button是定义在fragment.xml里面的,而findviewbyid却是在main.activity里面调用的,而这样是获 ...

  3. C#中SQL参数传入空值报错解决方案

    C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value. 注意:SQL参数是不能接受C#的null值的,传入null就会报错. 下面我们看个例子: ...

  4. c# 第七节 编程规范,vs中的各种设置

    本节内容: 1:编程规范 2:vs中的各种设置 3:一个解决方案多个项目的创建.使用 1:编程规范 需要规范的地方: 1: 2: 2:vs中的各种设置 实现: 3:一个解决方案多个项目的创建.使用

  5. 实现ScrollView中包含ListView,动态设置ListView的高度

    ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...

  6. android,在fragment中使用listview,不使用listfragment

    public class LeftFragment extends Fragment{ private ListView listView; @Override public View onCreat ...

  7. android中设置ListView的选中的Item的背景颜色

    ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的. 1.配置main.xml <? ...

  8. 在Fragment中加一个嵌套了ListView的ScrollView(一)

    首先介绍一下这个程序的功能: 1.顶部有两个可以切换Fragment的Button 2.在其中一个Fragment中里有个ScrollView,ScrollView中有ViewFlipper,List ...

  9. Fragment中添加ListView而不使用ListFragment

    最初的构想是,将Fragment和ViewPager结合起来, 然后突发奇想,在第一个Fragment里添加了ListView, 依照网上的建议,extends了ListFragment,接着各种报错 ...

随机推荐

  1. 原生javascript添加引用js文件

            function addScriptTag(src) {                         var script = document.createElement(&qu ...

  2. print带参数格式

    string_1 = "Camelot" string_2 = "place" print("float:%lf. int:%d string:%s. ...

  3. Linux内存点滴 用户进程内存空间

    Linux内存点滴 用户进程内存空间 经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的. VIRT, Virtual Image (kb) RES, Re ...

  4. hdu 5256 序列变换(LIS最长上升子序列)

    Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多 ...

  5. spring + jdbc + extjs configuration

    所有源代码能够訪问我的GitHub 有空没空的稻谷了几天,最终前后台跑通了,提供一套可用的配置文件. (因为与extjs整合,spring security的登录须要重写原handler.会在后面补上 ...

  6. HLJOJ1015(多源最短路径失真)

    意甲冠军:n,m,k,有着n村.有着k路,每个村都有一个电话亭,现在,我们要建立在村中心展台,快递每一个需要同村的中心村,然后返回报告(有向图),有着m电话,假设村配置的手机,那么你并不需要报告.最低 ...

  7. Android加载图片OOM错误解决方式

    前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...

  8. iOS:UI系列之UINavigationController

    又到了总结的时间了,突然间感觉时间过得好快啊, 总觉的时间不够用,但是这也没办法啊, 只有自己挤时间了,虽然是零基础,但是这并不能代表什么啦,只要努力,收获总还是有的, 同时我也相信广大的博友肯定也有 ...

  9. python os模块文件相关

    使用前 import os导入模块   os模块: os.sep     可以取代操作系统特定的路径分割符 os.linesep  字符串给出当前平台使用的行终止符.例如,Windows使用'\r\n ...

  10. sql复制表数据的方法

    第一种: INSERT INTO dbo.Student1 ( uid, username ) select uid,username FROM dbo.Student2 备注:Student1表是必 ...