【问题标题】:merge two adapters to show one from each in listview合并两个适配器以在列表视图中显示一个
【发布时间】:2013-11-28 12:58:45
【问题描述】:

我有两个适配器,我想将它们合并到一个 ListView 中。所以我可以分别显示一个。 示例

Adapter1 , Adapter2.

ListView 
getView(position = 0) -> from Adapter1
getView(position = 1) -> from Adapter2
getView(position = 2) -> from Adapter1
getView(position = 3) -> from Adapter2
getView(position = 4) -> from Adapter1

我看到 Commonsware 的 Merge Adapter 它以与您添加适配器相同的顺序显示项目。示例:mergeadapter.addAdapter(adapter1);mergeadapter.addAdapter(adapter2);然后它将显示所有适配器 1 项目,然后显示所有适配器 2 项目,没有办法像我写的例子一样从每个项目上显示。

【问题讨论】:

  • 您不应为此使用两个不同的适配器。您应该使用一个适配器,并结合两者的数据源。
  • @RGraham 有时您只有两个适配器,因此您无法合并数据
  • @Alex True,但adapter.getItem(position) 应该允许您从现有适配器填充新源。从代码的角度来看,我认为Adapter1Adapter2 的合并不再是其中之一,而是现在Adapter3。当然,也许有一个我没有想到的场景
  • @RGraham。是的,我没有意识到有更多的要求。

标签: android listview android-adapter


【解决方案1】:

有一个很棒的组件可以做到这一点以及更多(您也可以合并适配器和单个视图)

https://github.com/commonsguy/cwac-merge

【讨论】:

  • 我看到了它以与您添加适配器相同的顺序显示项目。示例:mergeadapter.addAdapter(adapter1);mergeadapter.addAdapter(adapter2);然后它将显示所有适配器 1 项目,然后显示所有适配器 2 项目,没有办法像我在原始问题中写的示例中一样显示每个项目
【解决方案2】:

您应该为每个适配器使用数据来填充第三个主适配器。这是一个非常基本的 String` 示例:

String[] dataSource1 = { "One", "Three" };
String[] dataSource2 = { "Two", "Four"};
String[] dataSource3 = new String[4];
int index = 0;
for(int i=0; i< dataSource1.length; i++) {
    dataSource3[index++] = dataSource1[i];
    dataSource3[index++] = dataSource2[i];
}
// dataSource3 == { "One", "Two", "Three", "Four" }
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.itemlayout, dataSource3);

就像我说的,它非常基础,根本无法扩展,但它说明了您需要做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2011-09-17
    • 2012-12-02
    相关资源
    最近更新 更多