java如何在顶部显示特定的recyclerview项?
假设我有一个关于膳食列表的web请求,并使用Recyclerview实现,现在如果我想在顶部对特定项目进行排序/移动,该怎么办
餐:意大利面食|类型:意大利面食|价格:20$
餐:热狗披萨|类型:披萨|价格:10$
餐:汉堡|类型:快餐|价格:30$
餐:米饭|类型:午餐|价格:18$
餐:Mac&;奶酪类型:午餐价格:17$
餐:奶酪汉堡|类型:快餐|价格:8$
举个例子,我想要的是每一个有fast food
和pizza
类型的项目显示在列表的顶部,然后是其他的
我在哪里执行这种排序逻辑,是在适配器内部还是在recyclerview的活动中?像moveToTop()
这样的函数是否有类似的现有方法可以这样使用:
for(Meals item: dataList){
if (item.getType.equals("fast food") || item.getType.equals("pizza")){
item.moveToTop();
}
}
可能吗
更新2
我发现了一个方法,在这些情况下,我为recyclerview找到了一个特殊的接口参数SortedListAdapterCallback
if (homeData.size() > 0) {
Collections.sort(homeData, Collections.reverseOrder(new SortedListAdapterCallback<HomeItemModel>(adapter) {
@Override
public int compare(HomeItemModel o1, HomeItemModel o2) {
int weight1;
int weight2;
if(item1.getType.equals("fast food") || item1.getType.equals("pizza")){
weight1 = 1;
}else{
weight1 = 0;
}
if(item2.getType.equals("fast food") || item2.getType.equals("pizza")){
weight2 = 1;
}else{
weight2 = 0;
}
if (weight1 == weight2)
return 0;
else if (weight1 > weight2)
return 1;
else
return -1;
}
@Override
public boolean areContentsTheSame(HomeItemModel oldItem, HomeItemModel newItem) {
return false;
}
@Override
public boolean areItemsTheSame(HomeItemModel item1, HomeItemModel item2) {
return false;
}
}));
}
这里唯一的问题是,顶部的订单。。!它们表现为:
- 快餐
- 披萨
- 披萨
- 快餐
- 披萨
- 快餐
- 。。。名单的其余部分
我希望他们表现得井然有序。。像这样:
- 快餐//还是先吃披萨
- 快餐
- 快餐
- 披萨
- 披萨
- 披萨
- 。。。名单的其余部分
这能做到吗
# 1 楼答案
在你的POJO课程中创建一个比较器
在设置适配器调用之前,请先将数据列表传递给适配器构造函数
编辑 如果你想先吃所有的快餐,然后吃披萨,然后是所有的清单 然后调整你的排序逻辑如下