【问题标题】:Android - ListView Adapter with items of two viewsAndroid - 具有两个视图项的 ListView 适配器
【发布时间】:2013-07-19 00:04:08
【问题描述】:

我是 Android 编程新手,我陷入了两天无法解决的问题。
我有一个 ListActivity 应该填充两个几乎没有相似性的不同视图。到目前为止,我一直在使用 MergeAdapter 并且效果很好,但我的结果是这样的: 适配器 1,适配器 2。而且我无法更改列表中项目的顺序。 我的问题是:是否可以创建一个适配器来保存两个视图的项目而不是两个视图的适配器,所以我将按照我输入它们的方式对我的项目进行排序? 为简单起见,我得到了这两个项目的 ArrayList,每个项目都有“int position”,因此我可以将它们插入按位置排序的列表中。
编辑:我已经尝试扩展 BaseAdapter 但我再次需要两个适配器,因为我在网上阅读过,但如果我这样做,我将无法控制列表中某个项目的位置。 我希望我这次更清楚。 欢迎任何回应。
谢谢。

【问题讨论】:

  • 是的,您可以扩展 BaseAdapter 以创建自己的自定义适配器,覆盖 getView() 并在其中完成所有技巧。

标签: android listactivity


【解决方案1】:

您可以继承 BaseAdapter 并使用以下方法:

getItemViewType(int position)

getViewTypeCount()

getViewTypeCount() 应该返回适​​配器支持的不同行类型的数量。 getItemViewType() 是您实施特定行应具有的视图类型的“决定”的地方。例如,如果 getViewTypeCount() 返回 3,那么 getItemViewType() 方法应该返回 0、1 或 2。

您可以在 getView 内部使用它来为不同的行类型膨胀/创建不同的布局。

编辑:

由于它是一个自定义适配器,因此您可以以任何对您的数据有意义的方式来实现它。如果您可以创建一个适用于您想要的数据结构,那么只需让适配器能够使用它。在最坏的情况下,您可能只有一个对象数组(或列表)并且必须使用instanceof 来进行决策工作。

【讨论】:

  • 您能解释一下吗?正如我所说,我有两种观点。 item1.xml 和 item2.xml。我该怎么做才能在一个列表中同时使用它们,同时可以选择控制位置?
  • 你实现 getviewtypecount 返回两个。在 getItemViewType 中,您为第 1 项返回 0,为第 2 项返回 1。那么您可以实现 getView 而不必担心在两种类型之间进行转换。就这些了
  • 成功了!我已经扩展了 BaseAdapter 并使用了 instanceof 来做出决定。非常感谢!
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
相关资源
最近更新 更多