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).