遇到的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)。

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

时间: 2024-10-24 19:13:50

遇到的Fragment中使用setAdapter()设置ListView报空指针解决方案的相关文章

Android中res中的Layout布局文件报空指针问题layout_galazuser_center.xml: java.lang.NullPointerException

错误信息:只截取了一部分java.lang.NullPointerException at android.graphics.Canvas_Delegate.restoreTo(Canvas_Delegate.java:1175) at android.graphics.Canvas_Delegate.restoreToCount(Canvas_Delegate.java:268) at android.graphics.Canvas.restoreToCount(Canvas.java) at

如何在Fragment中获取FragmentActivity中的布局????

============问题描述============ 我是想在Fragment中往FragmentActivity里面的布局里添加控件,现在我怎么在Fragment中得到这个布局呢?? ============解决方案1============ 一种思路是定义一个接口,如 OnDecoratorSelectListener,然后Activity实现这个接口,当Fragment里面选择了一个脸型的时候,调用((OnDecoratorSelectListener)getActivity).onD

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

首先介绍一下这个程序的功能: 1.顶部有两个可以切换Fragment的Button 2.在其中一个Fragment中里有个ScrollView,ScrollView中有ViewFlipper,ListView.(另一个Fragment中就随意了) 随着listView的滚动,ViewFlipper中的内容也会滚动. 3.两个布局(主布局,一个Fragment的布局(另一个没写,其实都一样)),一个Fragment,一个主Activity,重写ListView(不重写的话,不会随着ViewFlip

如何在android中利用Theme设置application 的所有listview的style?~

今天看VLC的源代码,发现一个很神奇的东西 所有listview的点击效果背景色都是橘黄色 花了点时间找了一下看看怎么实现的. 首先,定义一个<selector> like this: <selector> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/

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

ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的. 1.配置main.xml Java代码   <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

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

public class LeftFragment extends Fragment{ private ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.lesson_table_left, null); listV

Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置

http://m.blog.csdn.net/blog/yusewuhen/43706169 转载请注明出处: http://blog.csdn.net/androiddevelop/article/details/38815493 希望得到的效果是ListView不能滚动,但是最大的问题在与ListView Item还必有点击事件,如果不需要点击事件那就简单了,直接设置ListView.setEnable(false); 如果还需要点击事件,滚动与点击都是在ListView Touch处理机制

Fragment中添加ListView而不使用ListFragment

最初的构想是,将Fragment和ViewPager结合起来, 然后突发奇想,在第一个Fragment里添加了ListView, 依照网上的建议,extends了ListFragment,接着各种报错. 仔细看了下,原来是MainActivity这里: 1 //构造适配器 2 List<Fragment> fragments=new ArrayList<Fragment>(); 3 fragments.add(new Fragment1()); 4 fragments.add(ne

ListView中分割线的设置

1.在布局文件中ListView元素中通过属性设置 android:divider="#fffff" 分割线颜色 android:dividerHeight="1px" 分割线高度 2.使用XML文件设置 <!-- res/drawable/liner.xml -> <?xmlversionxmlversion="1.0"encoding="utf-8"?> <layer-list xmlns:a