Allora, passo all'adapter l'array "orari", quindi, per ogni query passo ogni dato dell'array "orari".
Ricevo errore
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
la parte incriminata è quando richiamo i dati dalla classe "Dettaglio", queste righe:
Dettaglio d = dettagli.get(position);
tvAppuntamento.setText(d.nome + " " + d.cognome);
non dovrebbe dare errore, ho fatto in passato una cosa simile con i mesi dell'anno e cioè, una lista dei mesi dell'anno, e per ogni mese faccio una query che raggruppa i dati in base al mese corrispondente, guarda questo codice, funziona perfettamente anche se i dati della classe "Dettaglio" sono vuoti..
il metodo vecchio con i mesi dell'anno:
private void showDetails(String anno){
SQLiteDatabase db = new MyHelper(this).getReadableDatabase();
final List<Dettaglio> dettagli = new ArrayList<Activity.Dettaglio>(12);
for (int i=1; i<=12; i++){
String mese;
if (i<10){
mese = "0"+i;
} else {
mese = ""+i;
}
String sql = "SELECT SUM(data1), SUM(data2), SUM(data1)-SUM(data2) FROM Table WHERE data LIKE '"+anno+"-"+mese+"%'";
Cursor c = db.rawQuery(sql, null);
while (c.moveToNext()){
Dettaglio d = new Dettaglio();
d.data1 = c.getFloat(0);
d.data2 = c.getFloat(1);
d.differenza = c.getFloat(2);
dettagli.add(d);
}
c.close();
}
db.close();
ListAdapter adapter = new ArrayAdapter<Dettaglio>(this, R.layout.dettaglio_row, R.id.tv_mese, dettagli){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
String month = new DateFormatSymbols(Locale.getDefault()).getMonths()[position];
TextView tvMonth = (TextView) row.findViewById(R.id.tv_mese);
tvMonth.setText(month);
TextView tvData1, tvData2, tvDiffrenza;
tvData1 = (TextView) row.findViewById(R.id.tv_1);
tvData1.setTextColor(Color.GREEN);
tvData2 = (TextView) row.findViewById(R.id.tv_2);
tvData2.setTextColor(Color.RED);
tvDiffrenza = (TextView) row.findViewById(R.id.tv_3);
tvDiffrenza.setTextColor(Color.YELLOW);
Dettaglio d = dettagli.get(position);
tvData1.setText(d.data1+"");
tvData2.setText(d.data2+"");
tvDiffrenza.setText(d.differenza+"");
return row;
}
};
lista.setAdapter(adapter);
}
il codice completo che dà errore:
private void prova() {
SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
final List<Dettaglio> dettagli = new ArrayList<appuntamenti.Elenco_appuntamentiFragment.Dettaglio>(25);
for (int i = 1; i <= orari.length; i++) {
String prova = "" + i;
String tabella_op = "SELECT m.id_cliente, m.ora, c.nome, c.cognome FROM Movimenti m LEFT JOIN Clienti" +
" c ON (m.id_cliente = c._id) AND ora LIKE '" + prova + "'";
Cursor cur = db.rawQuery(tabella_op, null);
while (cur.moveToNext()) {
Dettaglio d = new Dettaglio();
d.id = cur.getString(0);
d.ora = cur.getString(1);
d.nome = cur.getString(2);
d.cognome = cur.getString(3);
dettagli.add(d);
}
cur.close();
}
db.close();
ListAdapter adapter = new ArrayAdapter<String>(getActivity(), R.layout.appuntamenti_row, R.id.timeText, orari) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
String ore = orari[position];
TextView tvMonth = (TextView) row.findViewById(R.id.timeText);
tvMonth.setText(ore);
TextView tvAppuntamento;
tvAppuntamento = (TextView) row.findViewById(R.id.eventText);
Dettaglio d = dettagli.get(position);
tvAppuntamento.setText(d.nome + " " + d.cognome);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tvMonth = (TextView) view.findViewById(R.id.timeText);
String item = tvMonth.getText().toString();
Toast.makeText(getActivity().getBaseContext(), item, Toast.LENGTH_LONG).show();
}
});
return row;
}
};
list.setAdapter(adapter);
}
private class Dettaglio {
String id;
String nome;
String cognome;
String ora;
}
sono praticamente uguali....devo uscirne!!!!!