ArrayAdapter <myclass>附加到View </myclass>

时间:2012-05-14 15:57:54

标签: java android

早上好,

我似乎错过了将ArrayAdapter连接到视图的一条信息(仍在我的第一个Android应用程序上学习)。我创建了一个类,我们将调用MyInfoClass,它只是一些用于保存数据的属性。我用数据行填充类,最后我有一个ArrayList(MyInfoClass&gt;。 到目前为止一切都那么好,一切看起来都很棒,而且值也是我在Debug透视图中所期望的。

我还有一个XML布局,上面有一些TextView。我想使用这个布局来显示ArrayList中保存的不同“数据集”(MyInfoClass&gt;。我明白要这样做,我会使用ArrayAdapter,我使用以下行:

ArrayAdapter<MyInfoClass> X = new ArrayAdapter<MyInfoClass>(this, R.layout.main, R.id.txtvw_PrevLift, ld_data);

(ld_data是ArrayList(MyInfoClass&gt;对象)

我的困惑来自......好不知道我在做什么,但无论如何,它来自于不了解如何将MyInfoClass的属性连接到相应的TextView。 ArrayAdapter文档没有显示采用List of TextView id的????

的构造函数

感谢您的帮助。 JB

为了帮助解决我的困惑,我不会绑定到列表....也许我应该?我只是希望整个视图代表一行数据。为了便于阅读,我修剪了很多代码,但这是我的看法。一些文本视图是静态标签,其他视图将被填充。按钮用于来回导航。

<RelativeLayout....>

    <ImageView
        android:id=.../>

    <TextView
        android:id=.../>

    <ImageView
        android:id=.../>


    <TextView
        android:id=.../>

    <TextView
        android:id=.../>

    <TextView
        android:id=.../>

    <Button
        android:id=.../>

    <Button
        android:id=.../>

</RelativeLayout>

2 个答案:

答案 0 :(得分:3)

在您的情况下,最好使用SimpleAdapter

您定义一个表示列表项的XML文件。此XML文件将包含TextViews,您可以在其中显示MyInfoClass中的数据。说它是my_list_item.xml

<LinearLayout...>
<TextView android:id=name.../>
<TextView android:id=gender.../>
<TextView android:id=occupation.../>
</LinearLayout>

假设您的数据为MyInfoClass.getName(), .getGender(), .getOccupation()

您创建地图列表,每个地图代表一个列表项的数据:

List<HashMap<String, String>> maps = new ArrayList<HashMap<String, String>>();

您在此列表中填写了以下信息:

for(int i=0; i<myArray.size(); ++i) {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("name", myArray.get(i).getName()); 
        map.put("gender", myArray.get(i).getGender()); 
        map.put("occupation", myArray.get(i).getOcupation()); 
        maps.add(map); // add this entry to the list
    );

您还可以创建2个数组:一个包含键的名称(“名称”,“占用”,“性别”),另一个包含相应资源的ID。它们为String[] from, int[] to,因此地图中包含密钥from[n]的数据会显示在ID为to[n]

的视图中
String[] from = new String[] {"name", "gender", "occupation" };
int[] to = {R.id.name, R.id.gender, R.id.occupation }

然后使用该列表和XML文件创建SimpleAdapter

SimpleAdapter mAdapter = new SimpleAdapter(YourActivity.this, maps, R.layout.my_list_item, from, to);

然后在ListActivity中设置此适配器,将显示以下列表:

setListAdapter(mAdapter);

如果你想显示除Strings之外的其他东西,你需要继承SimpleAdapter并重新定义一些函数,如setViewTextsetViewImage,但我对此不太了解

答案 1 :(得分:1)

我认为您正在寻找简单列表适配器。

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

它允许您指定从(从构造函数中的[]开始)获取数据的字段以及将数据放置的位置(到构造函数中的[])

我不知道简单列表适配器是否适用于数据对象,但我知道它适用于Hashmaps。我在使用数据对象列表时使用了一个扩展BaseAdapter类型的自定义适配器。

有关如何在列表视图中使用简单适配器的信息,请参阅本教程:http://eureka.ykyuen.info/2010/01/03/android-simple-listview-using-simpleadapter/

编辑:如果您更喜欢坚持使用数据对象,那么这是另一个QA,它使用数据对象How to use ArrayAdapter<myClass>

显示自定义SimpleAdapter的简单实现

编辑#2::抱歉,我认为你绑定了一个列表。其他人最近遇到了这个问题我建议使用listview的基本基础结构,但是修改它以便只有一个项目跨越listview的整个大小。 基本上是包含所有文本视图的布局。在该示例中,您需要跟踪要显示的项目(从哪个数据对象获取信息)并使用它。您可以在此处查看我建议的解决方案:Android - wizard type activity with adapter backed data