【发布时间】:2017-09-14 17:37:15
【问题描述】:
假设我有一个膳食列表的网络请求并使用 Recyclerview 实现,现在如果我想在顶部对特定项目进行排序/移动..!
膳食: 意大利面 |类型: 意大利面 |价格: 20 美元
膳食: 热狗披萨 |类型: 披萨 |价格: 10 美元
膳食: 汉堡 |类型: 快餐 |价格: 30 美元
膳食: 米饭 |类型: 午餐 |价格: 18 美元
膳食: Mac & Cheese |类型: 午餐 |价格: 17 美元
膳食: 芝士汉堡 |类型: 快餐 |价格: 8 美元
因此,例如,我想要将类型为 fast food 和 pizza 的每个项目显示在列表顶部,然后显示其余部分......!?
我在哪里执行这个排序逻辑,是在适配器内部还是在 recyclerview 的活动中?有没有像moveToTop() 这样的函数的现有方法可以像这样使用:
for(Meals item: dataList){
if (item.getType.equals("fast food") || item.getType.equals("pizza")){
item.moveToTop();
}
}
有可能吗?
更新 2
我想通了,在这些情况下,我找到了一个方法,一个特殊的接口参数,用于recyclerviewSortedListAdapterCallback
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;
}
}));
}
这里唯一的问题是顶部的顺序..!它们是这样显示的:
- 快餐
- 披萨
- 披萨
- 快餐
- 披萨
- 快餐
- ...列表的其余部分
我希望它们显示有序.. 像这样:
- 快餐//或先吃比萨
- 快餐
- 快餐
- 披萨
- 披萨
- 披萨
- ...列表的其余部分
这样可以吗..?
【问题讨论】:
-
您必须对列表进行排序。你如何决定这样做取决于你
-
看看这个答案:stackoverflow.com/questions/42054262/… 虽然它不是 android 特定的,但它可能对你有帮助
标签: java android arrays android-recyclerview adapter