2016-05-15 3 views
1

Ich habe einen RecyclerView. Wenn ich auf die Schaltfläche zum Löschen klicke, wird ein Objekt aus dem RecyclerView entfernt, aber wenn ich die App neu starte, kommt das Objekt zurück. Hier ist die Funktion in meiner Datenbank Klasse:Artikel aus der SQLite-Datenbank, die nicht in RecyclerView gelöscht wird

public boolean deleteList(long rowId) { 
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
} 

Hier ist meine Adapter-Klasse mit der Löschtaste:

@Override 
public void onBindViewHolder(RecyclerViewViewHolder viewHolder, final int position) { 
    viewHolder.name.setText(list.get(position).name); 
    viewHolder.date.setText(list.get(position).date); 
    viewHolder.delete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      RecyclerViewListSchema item = list.get(position); 
      SQLiteDatabaseAdapter database = new SQLiteDatabaseAdapter(view.getContext()); 
      database.open(); 

      boolean deleteList = database.deleteList((long) position); 
      list.remove(position); 
      notifyItemRemoved(position); 

      database.close(); 
     } 
    }); 
} 

Update: ich hinzugefügt habe eine Commit-Funktion in meiner deleteList Funktion wie folgt :

public boolean deleteList(long rowId) { 
    db.beginTransaction(); 

    try { 
     db.setTransactionSuccessful(); 
    } 

    catch (Exception e) { 
     Log.v("Commit", "Error: + " + e); 
    } 

    finally { 
     db.endTransaction(); 
    } 
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
} 

Ich bekomme auch nichts in den Android Monitor. Wie kann ich dieses Problem beheben?

+0

ist die Liste von der Datenbank gefüllt? Vermisst du ein Commit? –

+1

@dumb_terminal Ja. Die Liste wird von der Datenbank ausgefüllt. –

+0

dann wird definitiv das Element nicht aus db entfernt. Zwei Dinge können hier existieren. 1. Die Löschlogik ist nicht erfolgreich. 2. Das Löschen ist erfolgreich, aber die Änderung wird nicht an db übergeben. –

Antwort

0

Sie versuchen zu löschen, indem Sie den Wert der aktuellen Position übergeben. Natürlich wird es nicht funktionieren! Sie müssen versuchen, das Element anhand seiner ID oder seines Namens innerhalb der RecyclerView abzurufen, wobei Letzteres bedeutet, dass kein Element in Ihrer Datenbank und RecyclerView denselben Namen haben kann. Versuchen Sie dies in Ihrer Datenbank-Klasse:

public boolean deleteList(String name) { 
    return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null); 
} 

Innerhalb des Adapters, rufen Sie die gleiche Funktion, aber das aktuelle Element Text übergeben, anstatt seine Position im RecyclerView.

+0

Jetzt klappt es. Ursprünglich würde es manchmal löschen und manchmal, es würde einfach nicht. –

+0

Das liegt daran, dass sich die Positionen ändern, wenn Sie einen Artikel entfernen, und Sie versuchen, den Artikel mit den falschen Positionen zu löschen. – Razor

Verwandte Themen