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