Android 列表视图数组
Android ListView arrays
我正在尝试创建一种议程,使用 ListView 根据时间列出当天的各种承诺。在 ListView 的第一列中,我可视化了一个包含一天中所有时间的数组,第二列中我想显示从数据库中获取的所有承诺。
我的问题是将变量 d.ora
关联到数组 orari
对应的行。例如:
Listview
8:00
8:30
9:00 9:00
9:30
10:00
10:30 10:30
private class Dettaglio {
String id;
String ora;
}
static final String[] orari = new String[]{
"8:00", "8:30", "9:00", "9:30", "10:00",
"10:30"};
private void prova() {
final List<Dettaglio> dettagli = new ArrayList<appuntamenti.Elenco_appuntamentiFragment.Dettaglio>(25);
SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
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);
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 = new Dettaglio();
tvAppuntamento.setText(d.ora);
return row;
}
};
list.setAdapter(adapter);
}
使用另一个布尔数组检查正在使用的时隙:
String[] orari = new String[]{"8:00", "8:30", "9:00", "9:30", "10:00", "10:30"};
boolean[] ora = new boolean[]{false, false, false, true, false, false, true};
我认为问题出在 getView() 中,您已将 Dettaglio 对象添加到列表中,但在显示时您没有从保存的列表中检索并显示。您正在创建一个新实例并显示其内容,该内容可以是默认值或 null。
TextView tvAppuntamento;
tvAppuntamento = (TextView) row.findViewById(R.id.eventText);
Dettaglio d = dettagli.get(position); //retrieve object from dettagli list
tvAppuntamento.setText(d.ora);
我正在尝试创建一种议程,使用 ListView 根据时间列出当天的各种承诺。在 ListView 的第一列中,我可视化了一个包含一天中所有时间的数组,第二列中我想显示从数据库中获取的所有承诺。
我的问题是将变量 d.ora
关联到数组 orari
对应的行。例如:
Listview
8:00
8:30
9:00 9:00
9:30
10:00
10:30 10:30
private class Dettaglio {
String id;
String ora;
}
static final String[] orari = new String[]{
"8:00", "8:30", "9:00", "9:30", "10:00",
"10:30"};
private void prova() {
final List<Dettaglio> dettagli = new ArrayList<appuntamenti.Elenco_appuntamentiFragment.Dettaglio>(25);
SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
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);
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 = new Dettaglio();
tvAppuntamento.setText(d.ora);
return row;
}
};
list.setAdapter(adapter);
}
使用另一个布尔数组检查正在使用的时隙:
String[] orari = new String[]{"8:00", "8:30", "9:00", "9:30", "10:00", "10:30"};
boolean[] ora = new boolean[]{false, false, false, true, false, false, true};
我认为问题出在 getView() 中,您已将 Dettaglio 对象添加到列表中,但在显示时您没有从保存的列表中检索并显示。您正在创建一个新实例并显示其内容,该内容可以是默认值或 null。
TextView tvAppuntamento;
tvAppuntamento = (TextView) row.findViewById(R.id.eventText);
Dettaglio d = dettagli.get(position); //retrieve object from dettagli list
tvAppuntamento.setText(d.ora);