【问题标题】:Generic ListView Adapter通用 ListView 适配器
【发布时间】:2012-07-16 17:39:27
【问题描述】:

我正在尝试创建一个自定义Adapter,它可以处理要膨胀的任何类型的布局。泛型是指要在适配器中设置的任何类型的数据和任何类型的布局都可以与要为项目设置的事件侦听器一起使用。

例如:

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

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

我希望在点击任何项目后刻度图像会重置。

【问题讨论】:

  • 感谢您的回复。但这不是我要找的。它类似于我拥有的其他链接。让我为您提供一些更好的:D android.amberfog.com/?p=296 sudarmuthu.com/blog/… 如果您愿意,我可以为您提供更多:D ...但我正在寻找一个可以处理不同类型列表项的通用适配器。而且我不必对任何布局进行硬编码。
  • 我不认为有任何通用的方法可以做到这一点。你可以做的是在膨胀你的视图之前添加一个switch 声明。但这没有任何意义......为什么你想要一个适配器?为每种类型的列表制作一个单独的适配器..
  • 当我集中精力使用列表视图时,我对此进行了一些思考,但我只是想不出一种通用的方法可以在 getView() 中从适配器内的布局中膨胀项目。但是,我有一种感觉,如果我们将充气部分从适配器中取出并放入调用适配器的活动中,它可能会成功。如果我们可以将 ViewHolder 设计放入其中,事情也会变得更酷。我想我会重新考虑这一点。
  • @MMohsinNaeem:原因很简单。不要在每次有新请求进来时使用不同的项目布局设计创建单独的适配器。如果我们可以只有一个适配器,开发人员可以更轻松地重用适配器,同时只更改布局和项目。

标签: java android android-layout android-listview android-adapter


【解决方案1】:

如果您有一个包含不同对象的列表,该对象可以是不同种类并且需要不同的视图来显示。这样做:

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

适配器现在只需从充满ViewProviders 的列表中取出元素并调用方法getView 来获取视图。

您不必担心视图的回收,因为视图存储在每个ViewProvider 中并且只会创建一次。然后也可以在对象端而不是在适配器中更新字段(如果有)。但是你必须通过调用notifyDataSetChanged()来通知适配器数据更改

【讨论】:

  • 感谢您的回复。我喜欢这个主意,但我仍然不确定这样做。你能提供一个代码示例吗?谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 2013-09-10
  • 2015-11-22
相关资源
最近更新 更多