排序列表在Android中查看数据

时间:2013-05-03 05:16:31

标签: android sorting listview

我有一些JSON数据,我从服务器上下载。该数据中的一个字段是距离值。我需要按ListView中从最低到最高的距离对数据进行排序。我不知道怎么办呢?

3 个答案:

答案 0 :(得分:2)

我不确切地知道你想要做什么,但是在你得到json响应之后需要几步。

  1. 将json数据创建为对象列表
  2. 对列表进行排序
  3. 使用排序列表设置listview的适配器
  4. 对于将来的问题,请将您的问题分成不同的小而具体的问题。

    <强> 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

答案 1 :(得分: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;
        }
    }
}

答案 2 :(得分:-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);


        }
    });
}