Ordinare una ListView in Android
Abbiamo visto come riempire una ListView in Android usando dati in formato JSON.
Solo che la lista risulta "statica" nel senso che come ci arriva la leggiamo, e non possiamo ordinarla.
Qui vediamo proprio questo: come ordinare una ListView simulando una tabella con righe e colonne.
Partiamo dalla Activity principale:
public class MainActivity extends Activity {
private TextView txtTitolo = null;
private TextView txtCreazione = null;
private ListView listView = null;
private SimpleAdapter adapter = null;
private ArrayList> list = new ArrayList>();@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setLista();
txtTitolo = (TextView) findViewById(R.id.h_titolo);
txtCreazione = (TextView) findViewById(R.id.h_creazione);
txtTitolo.setOnClickListener(new ListSort(list, "titolo", adapter));
txtCreazione.setOnClickListener(new ListSort(list, "creazione", adapter));
}
private void setLista() {
try {
listView = (ListView) findViewById(R.id.lista_articoli);
JSONArray jsonArray = new JSONArray(JsonFile.read(path + "blog_articoli.json"));
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jo = jsonArray.getJSONObject(i);
HashMap map = new HashMap();
map.put("id", jo.getString("id"));
map.put("titolo", jo.getString("titolo"));
map.put("creazione", jo.getString("creazione"));
map.put("modifica", jo.getString("modifica"));
map.put("count", jo.getString("count"));
list.add(map);
}
adapter = new SimpleAdapter(this, list, R.layout.rows,
new String[] { "titolo", "creazione", "modifica", "count" },
new int[] { R.id.titolo, R.id.creazione, R.id.modifica, R.id.count });
listView.setAdapter(adapter);
} catch (JSONException e) {
} catch (Exception e) {
}
}}
Tralascio tutta la parte del recupero dati, partendo che l'abbiate già messa a punto (quella parte non cambia).