1

早上好,

我似乎缺少将 ArrayAdapter 连接到视图的一条信息(仍在学习我的第一个 Android 应用程序)。我创建了一个名为 MyInfoClass 的类,它只是一些用于保存数据的属性。我用数据行填充类,最后我有一个 ArrayList(MyInfoClass>。到目前为止一切都很好,一切看起来都很好,并且值与我在 Debug 透视图中所期望的一样。

我还有一个 XML 布局,上面有一些 TextView。我想使用此布局来显示 ArrayList(MyInfoClass> 中保存的不同“数据集”。我知道要做到这一点,我将使用 ArrayAdapter,并且使用以下行:

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

(ld_data 是 ArrayList(MyInfoClass> 对象)

我的困惑来自......嗯,不知道我在做什么,但无论如何它来自不了解如何将 MyInfoClass 的属性连接到它们相应的 TextView。ArrayAdapter 文档没有显示采用 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>
4

2 回答 2

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()

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

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 个数组:一个带有键名(“name”、“occupation”、“gender”),另一个带有相应资源的 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 }

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

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

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

setListAdapter(mAdapter);

如果你想显示字符串以外的东西,你需要继承 SimpleAdapter 并重新定义一些函数setViewTextsetViewImage但我对此不太了解

于 2012-05-14T16:27:54.683 回答
1

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

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

它允许您指定从哪些字段获取数据(构造函数中的 from[])以及放置数据的位置(构造函数中的 to[])

我不知道简单列表适配器是否适用于数据对象,但我知道它适用于哈希图。当我使用数据对象列表时,我使用扩展 BaseAdapter 类型的自定义适配器。

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

编辑:如果您更喜欢使用数据对象,这里是另一个 QA,它显示了使用数据对象轻松实现自定义 SimpleAdapter如何使用 ArrayAdapter<myClass>

编辑#2::对不起,我以为你绑定到一个列表。其他人最近遇到了这个问题,我建议使用列表视图的基本基础结构,但对其进行修改,以便只有一个项目跨越列表视图的整个大小。该项目本质上是包含所有文本视图的布局。在该示例中,您需要跟踪要显示的项目(从哪个数据对象获取信息)并使用它。您可以在此处查看我建议的解决方案:Android - 带有适配器支持数据的向导类型活动

于 2012-05-14T16:13:13.370 回答