通过分页按日期对Recyclerview项进行分组

时间:2018-07-23 05:12:35

标签: java android android-recyclerview linkedhashmap

我想要实现类似

  17 July,2018
    - item
    - item
  16 July,2018
    - item
    - item
    - item

我已经通过以下链接成功实现了这一目标:

Divide elements on groups in RecyclerView or Grouping Recyclerview items ,say by date

但是现在问题出在分页上,如果下一页中存在相同的日期,那么它将创建相同日期的第二个标题。

  

即。   如果在第一页中我具有日期为2018年7月16日的数据,并且在第二页中如果我还具有日期为2018年7月16日的数据,那么将为2018年7月16日创建两个页眉。

 Page -1
 17 July,2018
        - item
        - item
 16 July,2018
        - item
        - item
 Page -2
 16 July,2018
        - item
        - item
        - item
        - item
 14 July,2018
        - item
        - item

我希望一个日期的所有项目都只能在一个标题下。.如果日期相同,我希望合并两个页面数据。

我的代码与上面给定的链接相同。.我仍然在添加一些重要的代码,如果需要任何其他代码,请告诉我。

 private LinkedHashMap<String, List<NotificationData>> groupDataIntoHashMap(List<NotificationData> listOfPojosOfJsonArray) {

        LinkedHashMap<String, List<NotificationData>> groupedHashMap = new LinkedHashMap<>();

        for (NotificationData pojoOfJsonArray : listOfPojosOfJsonArray) {

            String hashMapKey = pojoOfJsonArray.getTicket_date();

            if (groupedHashMap.containsKey(hashMapKey)) {
                // The key is already in the HashMap; add the pojo object
                // against the existing key.
                groupedHashMap.get(hashMapKey).add(pojoOfJsonArray);


            } else {
                // The key is not there in the HashMap; create a new key-value pair
                List<NotificationData>  list = new ArrayList<>();
                list.add(pojoOfJsonArray);
                groupedHashMap.put(hashMapKey, list);

            }
        }

        return groupedHashMap;
    }

内部服务成功:

 try {
            JSONObject object = new JSONObject(response);
            if (!Utils.isEmptyString(response)) {
                if (id == reqIdNotificationList) {

                    if (object.getInt(PARAMS.TAG_STATUS) == PARAMS.SUCCESS_STATUS) {
                        String resultArray = object.getString(PARAMS.TAG_RESULT);
                        if (!Utils.isEmptyString(resultArray)) {

                            Type listType = new TypeToken<List<NotificationData>>() {
                            }.getType();
                            ArrayList<NotificationData> tmpNotification = new Gson().fromJson(resultArray, listType);


                            if (tmpNotificationList != null)
                                tmpNotificationList = new ArrayList<>();

                            if (TextUtils.isEmpty(mtktNo)) {

                                tmpNotificationList.clear();
                                tmpNotificationList.addAll(tmpNotification);

                                LinkedHashMap<String, List<NotificationData>> groupedHashMap = groupDataIntoHashMap(tmpNotificationList);


                                for (String date : groupedHashMap.keySet()) {
                                    dateItem = new DateItem();
                                    dateItem.setTicket_date(date);
                                    consolidatedList.add(dateItem);


                                    for (NotificationData pojoOfJsonArray : groupedHashMap.get(date)) {
                                        generalItem = new GeneralItem();
                                        generalItem.setResult(pojoOfJsonArray);
                                        consolidatedList.add(generalItem);

                                    }

                                }
                                adapter = new NotificationListAdapter(this, consolidatedList, this);
                                rvNotification.setAdapter(adapter);

//                                notificationList.addAll(tmpNotificationList);
//                                adapter = new NotificationListAdapter(NotificationActivity.this, notificationList, this);
//                                rvNotification.setAdapter(adapter);

                            } else {

                                int startIndex = tmpNotification.size();
                                tmpNotificationList.addAll(tmpNotification);

                                Log.d("size",tmpNotificationList.size()+"");

                               adapter.notifyItemRangeInserted(startIndex, tmpNotificationList.size() - 1);

                                LinkedHashMap<String, List<NotificationData>> groupedHashMap = groupDataIntoHashMap(tmpNotificationList);

                                for (String date : groupedHashMap.keySet()) {
                                    DateItem dateItem = new DateItem();
                                    dateItem.setTicket_date(date);
                                    consolidatedList.add(dateItem);


                                    for (NotificationData pojoOfJsonArray : groupedHashMap.get(date)) {
                                        GeneralItem generalItem = new GeneralItem();
                                        generalItem.setResult(pojoOfJsonArray);
                                        consolidatedList.add(generalItem);
                                    }
                                }

                                if (consolidatedList.size() >= object.getInt(PARAMS.TAG_RECORD)) {
                                    rvNotification.removeMoreListener();
                                }


                            }
                            if (tmpNotificationList.isEmpty()) hideMenu();
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

注意:在给定的链接中,它是哈希图,但是我使用链接的哈希图来维护项目顺序。

我也使用了这个linear layout manager

谢谢!

0 个答案:

没有答案