简单适配器过滤给出空指针异常

时间:2011-07-25 18:00:28

标签: android android-layout

我正在尝试使用简单的适配器创建列表视图。这是我的代码和xml

list_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  
xmlns:android="http://schemas.android.com/apk/res/android"  
android:layout_width="fill_parent"  
android:layout_height="wrap_content"  
android:orientation="horizontal"  
android:paddingTop="3dip"  
android:paddingBottom="3dip"  
> 
<ImageView
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:paddingLeft="2dip"/>

    <LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:orientation="vertical"
    android:paddingLeft="2dip"
    > 

<LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:orientation="horizontal"
    android:paddingLeft="2dip"
    android:weightSum="3.0"
    > 
    <TextView  
        android:id="@+id/caption1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginRight="1dip"   
        android:textSize="15sp"
        android:textStyle="bold"
        android:gravity="left"
        android:lines="1"
        /> 
        <TextView  
        android:id="@+id/caption2"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginRight="1dip"   
        android:textSize="15sp"
        android:gravity="left"
        android:lines="1"
        android:paddingLeft="6dip"
        android:layout_weight="2.0"
        /> 
        <TextView  
        android:id="@+id/caption3"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginRight="1dip"   
        android:textSize="11sp"
        android:gravity="left"
        android:lines="1"
        android:layout_weight="1.0"
        /> 
</LinearLayout>


</LinearLayout>     
</LinearLayout> 

和我的listview代码

listView = getListView();
        View v1 = getLayoutInflater().inflate(R.layout.tabhost, null);
        listView.addHeaderView(v1);

        adapter = new SimpleAdapter(this, records_of_module, R.layout.list_main2, dispCols, 
                new int[] { R.id.icon,R.id.caption1,R.id.caption2,R.id.caption3,
                R.id.caption4,R.id.caption5,R.id.caption6 });

        setListAdapter(adapter);


        listView.setOnItemClickListener(this);
        listView.setTextFilterEnabled(true);

并按

过滤
adapter.getFilter().filter(s);
adapter.notifyDataSetChanged();

我不会得到例外。我的堆栈跟踪看起来像这样

FATAL EXCEPTION: main
java.lang.NullPointerException
at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
at android.widget.AdapterView.checkFocus(AdapterView.java:689)
at android.widget.AdapterView$AdapterDataSetObserver.onInvalidated(AdapterView.java:812)
at android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:43)
at android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:54)
at android.widget.SimpleAdapter$SimpleFilter.publishResults(SimpleAdapter.java:383)

请通过一些提示帮助我

提前谢谢 乔

1 个答案:

答案 0 :(得分:0)

它可能无法解决所有问题,但SimpleAdapter的构造函数会引用不在xml文件中的字段。您的布局包含图标以及caption1,caption2和caption3,但不包含caption4,caption5或caption6。

根据documentation for SimpleAdapters,您提供的xml资源必须至少包含您在构造函数的最后一个字段中指定的所有项目。