早上好,
我似乎错过了将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&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>
答案 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并重新定义一些函数,如setViewText
,setViewImage
,但我对此不太了解
答案 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