假设我有一个膳食列表的网络请求,并使用 Recyclerview 实现,现在如果我想在顶部排序/移动特定项目该怎么办......!
<小时/>餐食: 意大利面食 |类型: 面食 |价格:20$
餐食: 热狗披萨 |类型: 披萨 |价格:10$
餐食: 汉堡 |类型: 快餐 |价格:30$
膳食: 米饭 |类型: 午餐 |价格:18$
餐食: 通心粉和奶酪 |类型: 午餐 |价格:17$
餐食: 芝士汉堡 |类型: 快餐 |价格:8$
<小时/>例如,我想要的是将具有快餐
和披萨
类型的每个项目显示在列表顶部,然后显示其余部分。 .!?
我在哪里执行这个排序逻辑,是在适配器内部还是在 recyclerview 的 Activity 中?是否有像 moveToTop()
这样的函数的现有方法可以像这样使用:
for(Meals item: dataList){
if (item.getType.equals("fast food") || item.getType.equals("pizza")){
item.moveToTop();
}
}
可能吗?
<小时/>更新2
我发现,在这些情况下,我发现了一个方法,它是recyclerview接口(interface)的特殊参数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;
}
}));
}
这里唯一的问题是顶部的顺序..!它们显示如下:
- 快餐
- 披萨
- 披萨
- 快餐
- 披萨
- 快餐
- ...列表的其余部分
我希望它们显示有序..像这样:
- 快餐//或者先吃披萨
- 快餐
- 快餐
- 披萨
- 披萨
- 披萨
- ...列表的其余部分
这可以做到吗..?
最佳答案
在 POJO 类 Meals 中创建一个比较器
public static class CustomComparator implements Comparator<Meals> {
public int compare(Meals item1, Meals item2) {
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;
}
}
在设置适配器之前,请调用此行,然后将数据列表传递到适配器构造函数中。
Collections.sort(yourDataLIst, Collections.reverseOrder(new Meals.CustomComparator()));
编辑 如果您想先吃所有快餐,然后吃披萨,然后再吃所有 list 然后只需调整您的排序逻辑,如下所示
if(item1.getType.equals("fast food")){
weight1 = 2;
}else if (item1.getType.equals("pizza")){
weight1 = 1;
} else {
weight1 = 0;
}
if(item2.getType.equals("fast food")){
weight2 = 2;
}else if (item2.getType.equals("pizza")){
weight2 = 1;
} else{
weight2 = 0;
}
关于java - 如何在顶部显示特定的回收者 View 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46198160/