如何在新增/删除条目时对RecyclerView按TYPE属性自动排序
RecyclerView 条目按FASE类型排序实现方案
核心思路
提取每个条目标记TYPE字段中的数字,按照数字从小到大排序,实现FASE1到FASE8的升序排列。
实现方案1:插入时计算位置(性能最优,推荐)
不需要全量重排,新增条目时直接找到对应排序位置插入即可
- 新增优先级计算工具方法
// 提取TYPE字段对应的排序优先级,FASE1返回1,FASE2返回2,异常值默认放最后 private int getFasePriority(ItemPTERM item) { String type = item.getTYPE(); if (type == null || !type.startsWith("FASE")) { return 99; } try { return Integer.parseInt(type.replace("FASE", "")); } catch (NumberFormatException e) { return 99; } }
- 修改原
addOrRemove方法
private void addOrRemove(int position, boolean add) { Item prodotto = mFilteredList.get(position); ItemPTERM prodottoAggiunto = piattiAdapter.getItemByCode(prodotto.getCodice()); if (add) { ItemPTERM newItem = nuovoProdotto(prodotto); int newPriority = getFasePriority(newItem); int insertPos = piattiItems.size(); // 遍历找到第一个优先级更高的位置,插入到该位置前 for (int i = 0; i < piattiItems.size(); i++) { int currentPriority = getFasePriority(piattiItems.get(i)); if (currentPriority > newPriority) { insertPos = i; break; } } piattiItems.add(insertPos, newItem); piattiAdapter.notifyItemInserted(insertPos); recyclerPiatti.scrollToPosition(insertPos); } else { // 修正原逻辑:先获取条目在目标列表的真实索引再删除通知 int removePos = piattiItems.indexOf(prodottoAggiunto); if (removePos >= 0) { piattiItems.remove(removePos); piattiAdapter.notifyItemRemoved(removePos); } } }
实现方案2:全量排序(适合数据量小于100的场景,逻辑更简单)
增删操作完成后对整个列表排序,再刷新适配器
private void addOrRemove(int position, boolean add) { Item prodotto = mFilteredList.get(position); ItemPTERM prodottoAggiunto = piattiAdapter.getItemByCode(prodotto.getCodice()); if (add) { piattiItems.add(nuovoProdotto(prodotto)); } else { int removePos = piattiItems.indexOf(prodottoAggiunto); if (removePos >= 0) { piattiItems.remove(removePos); } } // 全量排序 Collections.sort(piattiItems, (o1, o2) -> getFasePriority(o1) - getFasePriority(o2)); piattiAdapter.notifyDataSetChanged(); }
注意事项
- 原代码中删除操作直接用传入的
position做通知是错误的,该position是源RecyclerView的索引,不是目标列表的索引,会导致条目显示错乱 - 如果需要同TYPE下的次级排序规则,可自行在比较逻辑中新增,比如按添加时间、商品编码排序等
内容的提问来源于stack exchange,提问作者NiceToMytyuk
相关产品推荐
相关产品推荐

