[英]How do show specific recyclerview items at the top?
比方說,我有一個Web請求,可獲取一份食物清單,並使用Recyclerview實現,現在,如果我想在頂部排序/移動特定項目該怎么辦。
餐點: 意大利面食 | 類型: 面食 | 價格: 20 $
餐: 熱狗比薩 | 類型: 披薩 | 價格: 10 $
餐: 漢堡 | 類型: 快餐 | 價格: 30 $
餐點: 米飯 | 類型: 午餐 | 價格: 18 $
餐: Mac和奶酪 | 類型: 午餐 | 價格: 17 $
餐: CheeseBurger | 類型: 快餐 | 價格: 8 $
因此,例如,我想要的是每一個具有fast food
和pizza
類型的商品都顯示在列表的頂部,然后顯示其余部分。
我在哪里執行此排序邏輯,它是在適配器內部還是在recyclerview的活動中? 有沒有像該函數那樣的現有方法moveToTop()
如moveToTop()
被這樣使用:
for(Meals item: dataList){
if (item.getType.equals("fast food") || item.getType.equals("pizza")){
item.moveToTop();
}
}
可能嗎?
我發現,在這種情況下,我找到了一個方法作為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;
}
}));
}
這里唯一的問題是頂部的訂單。 他們顯示如下:
我希望他們顯示有序..像這樣:
能做到嗎..?
在您的POJO類用餐中創建一個比較器
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;
}
}
並在設置適配器之前調用此行,然后將數據列表傳遞到Adapter構造函數中。
Collections.sort(yourDataLIst, Collections.reverseOrder(new Meals.CustomComparator()));
編輯如果您要先吃所有快餐,然后是披薩,然后是所有列表,則只需調整您的排序邏輯,如下所示
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;
}
Arraylist中沒有像moveToTop()
這樣的簡單方法。 但是您可以手動移動數據。
您可以這樣做:
for(Meals item: dataList){
if (item.getType.equals("fast food") || item.getType.equals("pizza")){
int index = dataList.indexOf(item);
dataList.remove(index);
dataList.add(0, item);
adapter.notifyDataSetChanged()
}
}
希望能幫助到你:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.