我想要实现类似
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。
谢谢!