关于Java动态分组排序的问题(Android中需要将数据排序给RecyclerView使用)
问题描述
现在有这样一个TestNotification里面定义了这些字段
private long time;private String pkg;
private String content;
private String title;
然后我需要将这些字段里面的pkg也就是PackageName分组,可能有音乐包名的,新闻包名的各种应用发来的不同消息,我需要将这些消息根据相同的包名来分组,目前可以将整个集合里面的数据用map分组。
private ArrayList<TestNotification> notificationArrayList = new ArrayList<>(); //添加消息,转换组
public void addGroupItem(TestNotification notification) {
//添加数据
notificationArrayList.add(notification);
//转换map
Map<String, List<TestNotification>> resultMap = new LinkedHashMap<>();
for (TestNotification testN : notificationArrayList) {
String pkg = testN.getPkg();
if (resultMap.containsKey(pkg)) {
resultMap.get(pkg).add(testN);
} else {
List<TestNotification> tmp = new LinkedList<>();
tmp.add(testN);
resultMap.put(pkg, tmp);
}
}
//遍历map
for (String key : resultMap.keySet()) {
//将key信息放入分组的头部
Level0Item level0Item = new Level0Item(key, "---聚合---");
List<TestNotification> notificationList = resultMap.get(key);
//遍历key下面的各个value
for (TestNotification testNotification : notificationList) {
//将key下面的value加入可折叠列表的子类中
level0Item.addSubItem(new Level1Item(testNotification.getTitle(),
testNotification.getPkg(), testNotification.isExpandItem(), testNotification.getContent()));
}
entityList.add(level0Item);
}
//为recyclerView设置数据源,通知刷新界面
setNewData(entityList);
}
希望能够解决的问题:
目前这样做,只能每次将所有的消息实体类遍历,然后每次为recyclerView设置新的数据源,导致已经展开的item,每次刷新都会重新合上。有什么好的排序方式,能够让我单处刷新新来的一条TestNOtification,而不需要每次全部遍历?
回答:
recyclerView是可以局部刷新的,就是刷新某一条数据。
没有太看明白你提出的需求,但是大致知道你是不想每次全部刷新。
这里分两个方面来考虑:
1、有新消息来的情况下,单独插入新的数据作为单独刷新
2、单独刷新已经存在的某一条信息。
局部刷新大致用到这个方法notifyItemChanged
以上是 关于Java动态分组排序的问题(Android中需要将数据排序给RecyclerView使用) 的全部内容, 来源链接: utcz.com/p/172642.html