2013-04-10 71 views
4

我有一个ListView,其中每个项目的视图是一个字符串(项目的名称)。但是我必须将许多其他数据与该项目相关联:价格,大小,重量,税收等。所以,我要创建一个名为Item的新Java类,然后为列表中的每个项目创建一个对象。列表视图中的复杂项目

我不知道哪种方法可以实现这一点。有两个明显的选择:

1)我可以简单地在任何Android视图之外创建数据结构,然后编写一个名为UpdateList()的方法,该方法采用此数据结构中每个项目的名称并将其放入ListView 。这样做的问题是一些数据会被复制两次(原始数据结构和ListView的适配器),当您复制数据时,会出现潜在的问题。

2)或者,我可以以某种方式直接将数据结构与ListView的适配器相关联,并让它找出如何显示每个显示的ListView条目的名称。这里的优点是你只有一个数据结构。但是我不知道这在Android中是否可行,或者非常复杂。

哪种方法可以在Android应用中执行此操作?

回答

1

只需使用适配器。它更干净。然后,您可以检索使用getView()显示列表项时所需的信息。请参阅this example

+0

我不能让你的榜样工作。我完全复制它,并收到14个编译器错误。第一个是:AlertsAdapter.java:9:包josecgomez.com.android.dev.webservice.objects不存在 [javac] import josecgomez.com.android.dev.webservice.objects.alerts; – 2013-04-10 23:49:23

9

如果您使用ListView和Adapter选项,那么您需要创建一个自定义的ArrayAdapter,以便按照您的需要从此对象中填充ListView

此技术的优点是您获得了一个Views回收机制,可以在您内部回收Views以便花费更少的内存。

在短期你必须:

1.创建一个代表你的数据的单个行的对象。

2.创建这些对象的ArrayList

3.创建一个包含ListView的布局,或者使用代码向您的主布局中添加一个ListView。

4.创建单行布局。

5.创建一个ViewHolder,从Views的立场来看,它将代表您的数据行的视觉方面。

6.创建一个自定义ArrayAdapter,将根据您的需要填充行。

7.onCreate最后指定这个ArrayAdapterListView

您可以通过阅读这篇博客我写得到如何实现这一点的想法:

Create a Custom ArrayAdapter

+0

+1提供的步骤。自定义适配器是做到这一点的方法。 – Raghunandan 2013-04-10 18:13:19

+0

谢谢。我会尽力实现这一点。 – 2013-04-10 18:48:41