2

我有一些从服务器中提取的 JSON 数据。此数据中的字段之一是距离值。我需要在 ListView 中按从最低到最高的距离对数据进行排序。我不知道该怎么做?

4

3 回答 3

2

我不确切知道您想要做什么,但是在您获得 json 响应后需要执行几个步骤。

  1. 将json数据制作成对象列表
  2. 对列表进行排序
  3. 使用排序列表设置 listview 的适配器

对于未来的问题,请将您的问题分成不同的较小但具体的问题。

1.将json数据制作成对象列表

对象数据模型

class YourDataModel {
       int distance;
       .....
       public int getDistance(){
              return this.distance;
       }

       public void setDistance(int distance){
              this.distance = distance;
       }
}

然后假设 getJsonResponse() 返回您的 json 以及列表的所有数据。让我们将该 json 列表设为 List :D

String json = getJsonResponse(); // Change that line with your code
Gson gson = new Gson();
Type listType = new TypeToken<List<YourDataModel>>(){}.getType();
ArrayList<YourDataModel> data = (ArrayList<YourDataModel>) gson.fromJson(jsonOutput, listType);

2.对列表进行排序

现在让我们做一些魔术:D 数据是我的数组,里面有项目。

Collections.sort(data, new Comparator<YourDataModel>() {
    @Override
    public int compare(YourDataModel data1, YourDataModel data2) {
          if( data1.getDistance() < data2.getDistance() )
             return 1;
          else
             return 0;
    }
});

3.将带有排序列表的列表适配器设置为列表视图

我不知道在这里描述什么 :D

ListView lvData = (ListView) findViewById(R.id.listview1);
MyCustomAdapter adapter = new MyCustomAdapter(this, R.layout.listview_item_row, data);
lvData.setAdapter(adapter);

我不知道这是否是您想要的,但这就是需要这样做的方式。如果您想直接从列表视图中对数据进行排序,请阅读以下内容:Sort listview with array adapter

于 2013-05-03T06:33:19.817 回答
0

使用它,你就完成了:

 private void sortAscending() {
    Collections.sort(productList, new AscendingComparator());
    rcAdapter.notifyDataSetChanged();
    Log.d("hightolow", "sortAscending" + productList);
    /*for (ProductModel s : productList){
        Log.d("My array list content: ", s.getPrice()+"::"+s.getName());
    }*/
}

private void sortDescending() {
    Collections.sort(productList, new DescendingComparator());
    rcAdapter.notifyDataSetChanged();
    Log.d("hightolow", "productList" + productList);
    for (ProductModel s : productList) {
        Log.d("My array list content: ", s.getPrice() + "::" + s.getName());
    }
}
public class AscendingComparator implements Comparator<ProductModel> {
    @Override
    public int compare(ProductModel p1, ProductModel p2) {

        int pM1 = Math.round(Float.parseFloat(p1.getPrice()));
        int pM2 = Math.round(Float.parseFloat(p2.getPrice()));
        if(pM1 > pM2){
            return 1;
        }else if((pM1 < pM2)){
            return -1;
        }else{
            return 0;
        }
    }
}

public class DescendingComparator implements Comparator<ProductModel> {
    @Override
    public int compare(ProductModel p1, ProductModel p2) {
        //Log.d("hightolow","productList"+p2.getPrice().compareTo(p1.getPrice()));
        //  Log.d("hightolow","productList:"+p1.getPrice());
        //    Log.d("hightolow","productList::"+p2.getPrice());
        int pM1 = Math.round(Float.parseFloat(p1.getPrice()));
        int pM2 = Math.round(Float.parseFloat(p2.getPrice()));
        if(pM2 > pM1){
            return 1;
        }else if((pM2 < pM1)){
            return -1;
        }else{
            return 0;
        }
    }
}
于 2018-05-01T06:44:45.733 回答
-1
 public void sortByLocation() {
    Collections.sort(list, new Comparator<PendingJobInfo>() {
        @Override
        public int compare(PendingJobInfo lhs, PendingJobInfo rhs) {
            // TODO Auto-generated method stub

            Double f1 = lhs.getDistance();
            Double f2 = rhs.getDistance();
            return f1.compareTo(f2);


        }
    });
}
于 2016-11-01T11:13:40.433 回答