【问题标题】:getting an illegalStateException for listview获取列表视图的非法状态异常
【发布时间】:2013-04-30 15:12:12
【问题描述】:

我有一个表格布局,我在其中显示数据库中的一些数据。 我将表格布局的行保持为可单击,因为我想在用户单击该行后在列表视图中显示与该行相关的数据库中的所有详细信息。 单击 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)

有人知道问题是什么吗?请帮忙!

列表视图代码:

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>

【问题讨论】:

  • 请贴一些代码...
  • @ling.s 我已经发布了列表视图和适配器的代码

标签: android listview illegalstateexception


【解决方案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 才能显示数据。

【讨论】:

  • 现在 m 在放置 ListAdapter adapter=new ArrayAdapter&lt;String&gt;(ListViewDetails.this, android.R.id.text1, R.layout.view_animal_entry,listvalues); 行后获取资源未找到异常
  • 请再次阅读答案。在布局 R.layout.view_animal_entry 中定义的 android.R.id.text1 位置提供 textview id
  • 哎呀对不起我的错!但即使将 id 设置为 R.id.animalName(您可以在我编辑的帖子中使用 xml 文件),它仍然显示资源未找到异常...04-30 12:20:51.362: E/AndroidRuntime(29307): android.content.res.Resources$NotFoundException: Resource ID #0x7f0a0154 type #0x12 is not valid
  • 对不起,这是我的错误。只需将 R.id.animalName 和 R.layout.view_animal_entry 相互交换即可。我也更新了我的答案。
【解决方案2】:

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 在这种情况下不起作用)

【讨论】:

  • 现在 m 在放置 ListAdapter adapter=new ArrayAdapter&lt;String&gt;(ListViewDetails.this, android.R.id.text1, R.layout.view_animal_entry,listvalues); 行后获取资源未找到异常
  • 尝试将android.R.id.text1更改为R.id.animalName
  • 是的,我这样做了...但即使将 id 设置为 R.id.animalName(您可以在我编辑的帖子中使用 xml 文件),它仍然显示资源未找到异常... 04 -30 12:20:51.362: E/AndroidRuntime(29307): android.content.res.Resources$NotFoundException: Resource ID #0x7f0a0154 type #0x12 is not valid
  • 请显示完整的堆栈跟踪(或至少前 3-4 行)
  • 04-30 12:40:25.882: E/AndroidRuntime(30976): android.content.res.Resources$NotFoundException: Resource ID #0x7f0a0154 type #0x12 is not valid 04-30 12:40:25.882: E/AndroidRuntime(30976): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2144) 04-30 12:40:25.882: E/AndroidRuntime(30976): at android.content.res.Resources.getLayout(Resources.java:853) 04-30 12:40:25.882: E/AndroidRuntime(30976): at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多