我有一些JSON数据,我从服务器上下载。该数据中的一个字段是距离值。我需要按ListView中从最低到最高的距离对数据进行排序。我不知道怎么办呢?
答案 0 :(得分:2)
我不确切地知道你想要做什么,但是在你得到json响应之后需要几步。
对于将来的问题,请将您的问题分成不同的小而具体的问题。
<强> 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);
}
});
}