android中的数组适配器

时间:2014-02-21 08:44:28

标签: android listview android-listview

我在这里有一个非常基本的问题: 我正在使用ArrayAdapter创建一个android列表,它将数据从字符串数组填充到listView:

final String[] listData={"Red", "Green", "Blue",
                "Purple", "Orange"};
        final ListView lv=(ListView)findViewById(R.id.listView1);

        final ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listData);
        lv.setAdapter(aa);

上面的代码工作正常。我的问题是,为什么我们不能使用以下适配器实现:

final ArrayAdapter<String> aa=new ArrayAdapter<String>(this, R.id.listView1, listData);

listView1是activity_main.xml中我的ListView的id。我尝试使用此实现但应用程序崩溃了。 我在这里错过了什么?对不起,如果这个问题看起来很傻,因为我还在学习如何编程android!谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

你有

ArrayAdapter<String> aa=new ArrayAdapter<String>(this, R.id.listView1, listData);

ArrayAdapter构造函数

的错误参数

查看公众onstructors @

http://developer.android.com/reference/android/widget/ArrayAdapter.html

ArrayAdapter(Context context, int resource, T[] objects)

第一个参数是上下文

第二个参数是资源

第三个参数是对象数组

通过上面的代码ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listData);

这里你使用的是一个内置的布局形式的android框架工作

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/frameworks/base/core/res/res/layout/simple_list_item_1.xml?av=f

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
    android:paddingRight="?android:attr/listPreferredItemPaddingRight"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

第二个参数是一个资源,它应该是一个带有文本视图的布局

第三个参数是textview id

答案 1 :(得分:1)

  

listView1是activity_main.xml中我的ListView的id。

构造函数期望TextView的id在哪里放置您通过listData提供的文本

答案 2 :(得分:1)

您要使用非自定义ArrayAdapter的自定义布局。 Android基本上不知道你的布局项目是什么,比如TextView。为此,您有另一个构造函数,您可以在其中指定TextView的ID:

final ArrayAdapter<String> aa=new ArrayAdapter<String>(this, R.id.listView1, R.id.your_textview_id, listData);

答案 3 :(得分:0)

在ArrayAdapter中(Context context,int resource,T [] objects)构造函数第二个参数是要膨胀的布局资源,所以你必须传递R.layout而不是R.id作为参数。在你的布局中应该是id @android的TextView:id / text,以便android自动设置你的字符串。如果你想提供你的id,那么使用ArrayAdapter(Context context,int resource,int textViewResourceId,T [] objects);