如何按降序对列表视图项进行排序
Posted
技术标签:
【中文标题】如何按降序对列表视图项进行排序【英文标题】:How to sort listview items in descending order 【发布时间】:2013-08-13 19:04:38 【问题描述】:所以我有一个列表视图,我想在其中按降序对 NumberOfRecords 进行排序。我有一个自定义数组适配器,但我在将数据放入 ArrayList 之前调用了排序类,这是我的 Asynctask 接收 JSON:
public class SampleListTask extends AsyncTask<String, Void, String>
public ProgressDialog pDialog;
@Override
protected void onPreExecute()
super.onPreExecute();
pDialog = new ProgressDialog(SampleActivity.this);
pDialog.setMessage("Loading...");
pDialog.setCancelable(false);
pDialog.show();
@Override
protected String doInBackground(String... path)
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
Log.d(Constant.TAG_RANKING, path[0]);
String apiRequestReturn = UtilWebService.getRequest(path[0]);
if (apiRequestReturn.equals(""))
Log.d(Constant.TAG_SAMPLE, "WebService request is null");
return null;
else
Log.d(Constant.TAG_SAMPLE, "WebService request has data");
return apiRequestReturn;
@Override
protected void onPostExecute(String result)
super.onPostExecute(result);
if (null != pDialog && pDialog.isShowing())
pDialog.dismiss();
if (null == result || result.length() == 0)
application.shortToast("No data found from server");
else
try
JSONObject sampleObject = new JSONObject(result);
JSONArray jsonArray = sampleObject
.getJSONArray(Constant.TAG_SAMPLE);
for (int i = 0; i < jsonArray.length(); i++)
JSONObject objJson = jsonArray.getJSONObject(i);
sample = new ArraySample();
sample.setId(objJson.getInt(Constant.TAG_SONGID));
sample.setThumbUrl(objJson
.getString(Constant.TAG_IMAGEURL));
sample.setTitle(objJson
.getString(Constant.TAG_NAME));
sample.setArtist(objJson
.getString(Constant.TAG_ARTIST));
sample.setDuration(Utility
.changeStringTimeFormat(objJson
.getString(Constant.TAG_MUSICLENGTH)));
sample.setNumberOfRecords(objJson
.getString(Constant.TAG_NUMBEROFRECORDS));
Collections.sort(sampleList, new SortByRecordNumber()); // This where I call the class
sampleList.add(sample);
catch (JSONException e)
e.printStackTrace();
setAdapterToListview();
public void setAdapterToListview()
objRowAdapter = new RowAdapterSample(getApplicationContext(),
R.layout.item_sample, sampleList);
sampleListView.setAdapter(objRowAdapter);
这是我的排序类:
public class SortByRecordNumber implements Comparator
public int compare(Object o1, Object o2)
ArraySample p1 = (ArraySample) o1;
ArraySample p2 = (ArraySample) o2;
return p2.getNumberOfRecords().compareTo(p1.getNumberOfRecords());
但我得到的结果是:
5
15
14
0
0
我的排序实现错了吗?还是应该在返回之前将其解析为 Integer?
【问题讨论】:
java comparator, how to sort by integer? 的可能重复项 谢谢,有类似的解决方案。 【参考方案1】:您可以使用以下代码对整数列表进行降序排序。这里我们重写 compare() 使其按降序排序。
//sort list in desc order
Collections.sort(myIntegerList, new Comparator<Integer>()
public int compare(Integer one, Integer other)
if (one >= other)
return -1;
else
return 1;
);
希望对您有所帮助。
【讨论】:
非常感谢!正如我自己发布的那样,这也解决了我的问题。 +1 为另一个解决方案而不创建任何类【参考方案2】:试试这个比较器。
Comparator objComparator = new Comparator()
public int compare(Object o1, Object o2)
int no1 = Integer.parseInt((String) o1);
int no2 = Integer.parseInt((String) o2);
return no1 < no2 ? -1 : no1 == no2 ? 0 : 1;
;
Collections.sort(myIntegerList, objComparator);
【讨论】:
谢谢!这也有效,我将return no1 < no2 ? -1 : no1 == no2 ? 0 : 1;
倒转为return no2 < no1 ? -1 : no1 == no2 ? 0 : 1;
以进行降序。【参考方案3】:
好的,所以我通过替换解决了这个问题:
p2.getNumberOfRecords().compareTo(p1.getNumberOfRecords())
到:
(int) Integer.parseInt(p2.getNumberOfRecords()) - Integer.parseInt(p1.getNumberOfRecords())
因此,String 数据类型中整数的简单比较不会正确结果,而是首先通过以下方式解析字符串:
Integer.parseInt(string)
并获取数字字符串的真实值。
【讨论】:
以上是关于如何按降序对列表视图项进行排序的主要内容,如果未能解决你的问题,请参考以下文章