列表视图中的复杂项目
我有一个ListView,其中每个项目的视图是一个字符串(项目的名称)。但是我必须将许多其他数据与该项目相关联:价格,大小,重量,税收等。所以,我要创建一个名为Item的新Java类,然后为列表中的每个项目创建一个对象。列表视图中的复杂项目
我不知道哪种方法可以实现这一点。有两个明显的选择:
1)我可以简单地在任何Android视图之外创建数据结构,然后编写一个名为UpdateList()的方法,该方法采用此数据结构中每个项目的名称并将其放入ListView 。这样做的问题是一些数据会被复制两次(原始数据结构和ListView的适配器),当您复制数据时,会出现潜在的问题。
2)或者,我可以以某种方式直接将数据结构与ListView的适配器相关联,并让它找出如何显示每个显示的ListView条目的名称。这里的优点是你只有一个数据结构。但是我不知道这在Android中是否可行,或者非常复杂。
哪种方法可以在Android应用中执行此操作?
如果您使用ListView和Adapter选项,那么您需要创建一个自定义的ArrayAdapter
,以便按照您的需要从此对象中填充ListView
。
此技术的优点是您获得了一个Views回收机制,可以在您内部回收Views
以便花费更少的内存。
在短期你必须:
1.创建一个代表你的数据的单个行的对象。
2.创建这些对象的ArrayList
。
3.创建一个包含ListView的布局,或者使用代码向您的主布局中添加一个ListView。
4.创建单行布局。
5.创建一个ViewHolder
,从Views
的立场来看,它将代表您的数据行的视觉方面。
6.创建一个自定义ArrayAdapter
,将根据您的需要填充行。
7.在onCreate
最后指定这个ArrayAdapter
您ListView
。
您可以通过阅读这篇博客我写得到如何实现这一点的想法:
+1提供的步骤。自定义适配器是做到这一点的方法。 – Raghunandan 2013-04-10 18:13:19
谢谢。我会尽力实现这一点。 – 2013-04-10 18:48:41
我不能让你的榜样工作。我完全复制它,并收到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