“ArrayAdapter需要资源ID为TextView”问题

时间:2016-02-09 14:31:54

标签: java android xml listview layout

我似乎在使用ListView的自定义样式时遇到了问题。

所有在线搜索(stackOverflow和其他网站)都有相同的说法: - 创建一个my_style.xml布局文件。 - 在适配器中使用它。

但由于某些原因,这似乎并不适合我。 MainAct.java:

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.list_content, items);

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textview"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#0000DD"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

保存为/res/layout/list_content.xml。

如果我使用android.R.layout.simple_list_item_1,一切正常,我得到了自己的xml文件&#34; java.lang.IllegalStateException:ArrayAdapter要求资源ID为TextView&#34;。

有什么想法吗?

PS:我已经看过很多其他类似的问题/问题,包括:

"ArrayAdapter requires the resource ID to be a TextView" xml problems

How to set the text at center in ListView android application?

Android ListView Text Color

3 个答案:

答案 0 :(得分:1)

错误java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView清楚地说明了。您需要传递需要显示数据的textview。此外,当您使用自己的布局时,R.java应该属于您的项目,而不是android.R

更改

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.list_content, items);

arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_content, R.id.textview, items);

答案 1 :(得分:1)

问题是因为你传递了错误的参数类型。

看到你的代码后,我可以说你想使用以下版本的ArrayAdapter。

public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)

因此,根据您提供的代码段,以下内容适用于您。

arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_content, R.id.textview, items);

对于不同版本的arrayAdapter,您可以参考: http://developer.android.com/reference/android/widget/ArrayAdapter.html

答案 2 :(得分:0)

您正在做的是在您的包中声明xml并尝试从android.R.layout包访问它。 所以,改变

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.list_content, items);

arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_content, items);

它会起作用