ID Basierte Adapter

Korrektur: Adapter mit IDs

Im Buch auf Seite 223 fehlt in Listing 5.6 eine wichtige Zeile Code (im Constructor). Ohne dieser, geht der Adapter davon aus, dass man nur mit der Position im Adapter Arbeitet, aber nicht mit den IDs aus der Datenbank. Das rächt sich später beim Löschen eines Datensatzes.

Die Anweisung ist setHasStableIds(true) und weist dem Adapter an, mit IDs zu arbeiten.

Der Quellcode zu dem Artikel ist korrekt und enthält die fehlende Zeile:

Vorher

@Override
public long getItemId(int position) {
  if (_data == null) {
    return -1L;
  }

  if (_data.moveToPosition(position)) {
    return _data.getLong(_data.getColumnIndex(BaseColumns._ID));
  }

  return -1L;
}

Korrektur: Nachher

public TimeDataAdapter(Context context, Cursor data) {
  _context = context;
  _data = data;
  setHasStableIds(true);
}

...

@Override
public long getItemId(int position) {
  if (_data == null) {
    return -1L;
  }

  if (_data.moveToPosition(position)) {
    return _data.getLong(_data.getColumnIndex(BaseColumns._ID));
  }

  return -1L;
}