【问题标题】:Create a ListView that is fed by two ArrayLists at once OR two ListViews that appear as one in Android?创建一个由两个 ArrayList 提供的 ListView 或两个在 Android 中显示为一个的 ListView?
【发布时间】:2015-04-30 21:00:11
【问题描述】:

基本上,我想做什么:

  • 一次由两个 ArrayList 提供的 listView,每个列表放在一个部分中
  • 两个 ListView 在用户看来就像一个,所以如果您滚动到第一个 ListView 的末尾,您可以平滑地向下滚动到第二个 listView。

但我缺乏这样做的知识。

以下是我需要解决的问题的一些细节,以及我为什么要寻求上述解决方案。

我正在尝试在 android 中构建一个相当复杂的列表视图。它的数据目前存储在一个 ArrayList 中。每行的数据由一个自定义对象提供。我按日期对条目进行排序, 效果很好。我现在需要

  • 将该表分成两部分,根据我的自定义对象提供的第二个日期是否在过去(所以基本上基于布尔值
  • 在自定义设计中在这两个部分之间添加分隔符
  • 如果我的两个部分中的任何一个为空,我需要添加显示消息的对应占位符

这需要一个涉及两个列表的独奏,这样对条目进行排序和处理设计会更容易。

如果您问我尝试了什么:我已经通过将相关日期映射到未来来解决它,因此它们位于列表的顶部

Collections.sort(newsList, new Comparator<News>() {
            @Override
            public int compare(News p1, News p2) {
                DateTime startDate = new DateTime(p2.getValidUntil());
                DateTime endDate = new DateTime(p1.getValidUntil());
                if(Util.isEntryRelevant(p1)){
                    endDate = endDate.plusDays(1000);
                }
                if(Util.isEntryRelevant(p2)){
                    startDate.plusDays(1000);
                }

                Minutes diff = Minutes.minutesBetween(endDate, startDate);
                diff.getMinutes();
                return diff.getMinutes();
            }

        });

这可能是我迄今为止编写的最狡猾的一段代码。我想到了更多的解决方法,但它们似乎都变得凌乱和不干净。

【问题讨论】:

  • 为什么不创建一个自定义适配器(通过扩展 ArrayAdapter)来覆盖 getView 和 getCount?这将允许您从 getView 返回第一个列表和第二个列表,并在需要时包含分隔符或空内容。
  • 我确实有一个自定义适配器,它覆盖了 getView 和 getCount。但是我如何让它为每个视图返回正确的列表项?这将导致类似 if(location>newsItems1.size())return newsItems2.get(location+newsItems); getItem中的等等
  • 但这对我来说似乎不是一个干净的解决方案,或者这就是这样做的方法。

标签: java android listview android-listview arraylist


【解决方案1】:

本质上,您必须实现一个自定义的 BaseAdapter,它知道迭代您的两个数据源。您可以使用 this 之类的东西来节省一些时间,您可以在其中添加几个常规适配器。

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 1970-01-01
    • 2019-03-09
    • 2019-01-25
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多