Autore Topic: ListView da JSON senza SimpleAdapter  (Letto 677 volte)

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
ListView da JSON senza SimpleAdapter
« il: 17 Dicembre 2013, 20:32:28 CET »
0
ciao!

per riempire una listview con dati in formato json, praticamente faccio così:
Codice: [Seleziona]
                list = new ArrayList<HashMap<String, String>>();
                try {
                        JSONArray jsonArray = new JSONArray(
                                        JsonFile.read(Const.LOCAL_PATH
                                                        + Const.JSON_LAST_ENTRIES));
                        for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject jo = jsonArray.getJSONObject(i);
                                HashMap<String, String> map = new HashMap<String, String>();
                                map.put("id", jo.getString("id"));
                                map.put("valore", jo.getString("valore"));
                                map.put("causale_id", jo.getString("causale_id"));
                                map.put("causale", jo.getString("causale"));
                                map.put("conto_id", jo.getString("conto_id"));
                                map.put("conto", jo.getString("conto"));
                                map.put("data", jo.getString("data"));
                                map.put("note", jo.getString("note"));
                                list.add(map);
                        }
                } catch (ClientProtocolException ex) {
                } catch (IOException ex) {
                } catch (JSONException ex) {
                }

                adapter = new SimpleAdapter(getActivity(), list, R.layout.list_items,
                                new String[] { "id", "valore", "causale_id", "causale",
                                                "conto_id", "conto", "data", "note" }, new int[] {
                                                R.id.txt_id, R.id.txt_valore, R.id.txt_causale_id,
                                                R.id.txt_causale, R.id.txt_conto_id, R.id.txt_conto,
                                                R.id.txt_data, R.id.txt_note });
                lv.setAdapter(adapter);
solo che SimpleAdapter non mi piace granchè, anche perchè mi pare di aver capito essere meno flessibile e meno performante di altri adapter.
ma per usare dati json, che altra alternativa ho?
perchè in giro trovo solo esempi con simpleadapter!

Post unito: 18 Dicembre 2013, 14:58:10 CET
risolto implementando BaseAdapter:
Codice: [Seleziona]
public class JsonAdapter extends BaseAdapter {

        private ArrayList<HashMap<String, String>> data;
        private Activity activity;
        private static LayoutInflater inflater = null;

        public JsonAdapter(Activity activity,
                        ArrayList<HashMap<String, String>> data) {
                this.activity = activity;
                this.data = data;
                inflater = (LayoutInflater) activity
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
                return data.size();
        }

        @Override
        public Object getItem(int position) {
                return position;
        }

        @Override
        public long getItemId(int position) {
                return position;
        }

        @Override
        public View getView(int position, View view, ViewGroup parent) {
                View v = view;
                if (view == null) {
                        v = inflater.inflate(R.layout.list_layout, null);
                }
                TextView txtTitolo = (TextView) v.findViewById(R.id.txt_titolo);
                TextView txtAutore = (TextView) v.findViewById(R.id.txt_autore);
                HashMap<String, String> map = new HashMap<String, String>();
                map = data.get(position);
                txtTitolo.setText(map.get("title"));
                txtAutore.setText(map.get("author"));
                return v;
        }

        @Override
        public void notifyDataSetChanged() {
                super.notifyDataSetChanged();
        }

}
« Ultima modifica: 18 Dicembre 2013, 14:58:10 CET da fermat, Reason: Merged DoublePost »