Comment faire pour trier les éléments listview dans l'ordre décroissant
Donc, j'ai une listview où je voulais trier les NumberOfRecords dans l'ordre décroissant. J'ai un tableau personnalisé adaptateur, mais j'ai appelé mon tri de la classe avant que je place une donnée dans ma liste de tableaux, c'est mon Asynctask réception 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);
}
}
Et voici mon tri de classe:
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());
}
}
Mais le résultat que j'obtiens est:
5
15
14
0
0
Est mon tri de la mise en œuvre de mal? Ou dois-je analyser en Entier avant de revenir?
- double possible de java comparateur, comment trier en entier?
- Merci pour cette, avait même la solution.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le code suivant pour trier votre liste d'entiers est un ordre décroissant.Ici, nous sommes primordial de comparer() de sorte qu'il trie dans l'ordre décroissant.
Espère que cela aide.
Essayez avec cette Comparaison.
return no1 < no2 ? -1 : no1 == no2 ? 0 : 1;
àreturn no2 < no1 ? -1 : no1 == no2 ? 0 : 1;
pour l'ordre décroissant.Ok, donc j'ai résolu ce problème en remplaçant le:
p2.getNumberOfRecords().compareTo(p1.getNumberOfRecords())
à:
Ainsi, les simples comparer d'un entier en une Chaîne de caractères type de données ne serait pas le résultat correctement, mais pour analyser la chaîne de la première par:
Integer.parseInt(string)
et obtenir la valeur réelle de la chaîne.