获取listview的illegalStateException

时间:2013-04-30 06:00:22

标签: android listview illegalstateexception

我有一个表格布局,我在这里显示数据库中的一些数据。 我已将表格布局的行保持为可点击状态,因为我想在用户单击该行后显示与列表视图中该行相关的数据库中的所有详细信息。 点击m获取 IllegalStateException ...

04-30 11:17:03.982: E/AndroidRuntime(9466): java.lang.IllegalStateException: ArrayAdapter requires the resource        ID to be a TextView
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.AbsListView.obtainView(AbsListView.java:2159)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1246)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.ListView.onMeasure(ListView.java:1158)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.view.View.measure(View.java:15513)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
04-30 11:17:03.982: E/AndroidRuntime(9466):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)

任何人都知道问题是什么?请帮忙!

listview代码:

settings = getSharedPreferences("LandTshare", MODE_PRIVATE);
    prefEditor = settings.edit();

    rowid=settings.getInt("rowid", 0);

    WayDataBase way=new WayDataBase(getApplicationContext());

    ArrayList<String> listvalues=way.getListDetails(rowid);
    if(listvalues.size()!=0)
    {
        ListView lv=getListView();
        ListAdapter adapter=new ArrayAdapter<String>(ListViewDetails.this, R.layout.view_animal_entry,listvalues);
        lv.setAdapter(adapter);
    }

view_animal_entry.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="vertical" >
    <TextView
    android:id="@+id/animalId"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="gone" />

   <TextView
       android:id="@+id/animalName"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_marginBottom="5dp"
       android:layout_marginTop="5dp"
       android:paddingLeft="6dip"
       android:paddingTop="6dip"
       android:textColor="#A4C739"
       android:textSize="17sp"
       android:textStyle="bold" />

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

我认为你应该改变你的行

ListAdapter adapter=new ArrayAdapter<String>(ListViewDetails.this, R.layout.view_animal_entry,listvalues);

至此

  ListAdapter adapter=new ArrayAdapter<String>(ListViewDetails.this, R.layout.view_animal_entry, R.id.animalName, listvalues);

这应该有效。您必须指定textview id才能显示数据。

答案 1 :(得分:0)

ArrayAdapter构造函数中,textViewResourceId必须引用TextView资源ID。

您能告诉我们您的代码,并确保情况确实如此吗?

取自javadoc:

  

默认情况下,此类要求提供的资源ID引用单个TextView。        如果要使用更复杂的布局,请使用也带有字段的构造函数        ID。该字段id应引用较大布局资源中的TextView。

修改:您的第二个问题可能是ListView with rows containing a LinearLayout

的副本

您似乎可以使用默认ID:

来避免此Resources$NotFoundException: Resource ID #0x7f0a0154 type #0x12 is not valid消息 布局XML中的

<TextView android:id="@android:id/text1"/>

并在您的代码中:

ListAdapter adapter=new ArrayAdapter<String>(ListViewDetails.this, android.R.id.text1, R.layout.view_animal_entry,listvalues);

(我不确定为什么给定的ID在这种情况下不起作用)