zoukankan      html  css  js  c++  java
  • 遇到的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)。

    大家一般都只注意程序,而很少注意到布局也会造成应用的运行失败。

     

  • 相关阅读:
    HTTP与HTTPS
    各种排序算法的比较
    数据结构之堆排序
    数据结构之希尔排序
    快速排序与归并排序的区别与联系
    数据结构之快速排序
    DVWA-4.3 File Inclusion(文件包含)-High-利用file协议绕过防护策略
    DVWA-4.2 File Inclusion(文件包含)-Medium-双写绕过str_replace替换规则
    DVWA-4.1 File Inclusion(文件包含)-Low
    DVWA-3.4 CSRF(跨站请求伪造)-Impossible
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4691427.html
Copyright © 2011-2022 走看看