在RecyclerView中添加日期部分

时间:2017-02-22 15:05:39

标签: java android android-recyclerview

我需要一点帮助!

我已按照this指南获取了一些结果。

设置了适配器,初始化了recyclerview,但我遇到了麻烦 在列表中显示正确的数据。

所以这就是我想要做的事情:

首先,我将临时列出从api获取的数据,并创建一个日期数组列表。当然,我要从该数组列表中删除重复的日期,因为有些项目按相同的日期排序。

以下是一些代码,以及我如何在各个部分按日期填写Recyclerview和订购商品:

// dates - array list of dates(16 February, 20 February..)
// mEvents - temporarily list with size of 8 items
// originalList - list of events ordered by date

for (String date : dates) {
    originalList.clear();
    for (Event event2 : mEvents) {
        // Checking if item's date from temp. list is equal with
        // iterated date and adding to original list
        if (date.equals(event2.getDate())) {
            originalList.add(event2);
        }
    }

        // Attaching section to adapter with iterated date and array list related to that date
        EventSection eventSection
   = new EventSection(R.layout.lst_item_event_header, R.layout.lst_item_event_v2, date, originalList, getActivity());
                        mSectionedRecyclerViewAdapter.addSection(eventSection);
}

这里的问题是我从原始列表中获取最后2个项目的每个日期部分。我在这里失踪了什么?

修改

// I need to sort items by these dates into sections
Dates:: [2017-02-16, 2017-02-17, 2017-02-28, 2017-02-22, 2017-02-20]

Event date:: 2017-02-16
Event date:: 2017-02-16
Event date:: 2017-02-17
Event date:: 2017-02-17
Event date:: 2017-02-28
Event date:: 2017-02-22
Event date:: 2017-02-20
Event date:: 2017-02-20

2 个答案:

答案 0 :(得分:2)

好的,我终于在autor的库示例的帮助下找到了解决方案。所以,如果其他人像我一样遇到麻烦,这可能会对你有所帮助:

for (String date : dates) {
    originalList = getEventsWithDate(date);

    if (originalList.size() > 0) {
       mSectionedRecyclerViewAdapter.addSection(new EventSection(date, originalList, getActivity()));
    }
}

private List<Event> getEventsWithDate(String date) {
    List<Event> events = new ArrayList<>();

    for (Event event : mEvents) {
        if (date.equals(event.getDate())) {
            events.add(event);
        }
    }

    return events;
}

答案 1 :(得分:1)

你有一个嵌套的for循环,所以我的猜测是问题就在那里。如果这是您想要的,请仔细检查那里的情况。

for (String date : dates) {

    // Clear the list here so you render a new list of dates that equal the
    // event date with the date of this iteration.
    originalList.clear(); 
    for (Event event2 : mEvents) {    
        if (date.equals(event2.getDate())) { // Check this condition
            originalList.add(event2);
        }
    }
    ...
}

如果每次你最终得到64件物品都是如此。我不知道你的数据是什么,所以我无法为你验证这一点。

可能发生的情况是,通过不清除列表,您每次都会向视图添加越来越大的列表。在向列表添加新列表之前清除列表,您应该只呈现所需的列表。