1

我想创建一个自定义Adapter,它可以处理任何种类的布局被充气。泛型指的是在适配器中设置的任何类型的数据,并且可以为事件监听器使用任何种类的布局来为项目设置。通用ListView适配器

例如:

我有一个联系人列表和国家列表。联系人列表在其布局中有四个项目,即人员图像,姓名,号码和复选框。 Country List包含一个CountryName(TextView)和一个复选框。

是否有可能使用同一个适配器,并且该适配器处理所有类型的项目?

我希望在点击任何项目后重置打勾图像。

+0

来通知适配器有关数据更改的信息。[查看本文](http://samir-mangroliya.blogspot.in/p/android-image-listview.html) – 2012-07-16 17:45:26

+0

感谢您的回复。但那不是我正在寻找的。它与我拥有的其他链接类似。让我为您提供一些更好的:D http://android.amberfog.com/?p=296 http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications 如果你想我可以提供更多:D ...但我正在寻找一个通用的适配器,它可以处理不同种类的List项目。我不必硬编码任何布局。 – Ahmed 2012-07-16 17:49:02

+1

我不认为有任何通用的方法来做到这一点..你可以做的是在充气之前添加一个'switch'语句来查看。但它没有任何意义......为什么你想要一个适配器?为每种类型的列表创建一个单独的适配器.. – 2012-07-16 17:52:07

回答

3

如果您有一个带有不同对象的列表,这些对象可以是不同类型的,并且需要显示不同的视图。这样做:

让对象自己定义视图。在每个对象上实现一个接口ViewProvider。该接口应提供方法getView(),然后可以在适配器中调用该方法。

该适配器现在只能从列表中获取满足ViewProviders的元素,并调用方法getView来获取该视图。

由于视图存储在每个ViewProvider中,您将不必担心回收视图,并且只会创建一次。这些字段的更新(如果有的话)也可以在对象一侧进行,而不在适配器中进行。但是你必须通过调用notifyDataSetChanged()

+2

感谢您的回复。我喜欢这个主意,但我仍然不确定这样做。你能提供一个代码示例吗?谢谢 :) – Ahmed 2012-07-27 16:59:49