2016-05-15 7 views
1

私はRecyclerViewを持っています。削除ボタンをクリックすると、RecyclerViewからアイテムが削除されますが、アプリケーションを再起動するとアイテムが戻ってきます。ここでは関数は、私のデータベースクラスである:ここではSQLiteデータベースのアイテムがRecyclerView内で削除されない

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

は、削除ボタンで自分のアダプタクラスです:

@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(); 
     } 
    }); 
} 

アップデート: 次のように私は私のdeleteList関数内でコミット機能を追加しました:

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

Androidモニターでは何も取得できません。 この問題を解決するにはどうすればよいですか?

+0

は、データベースから設定されたリストですか?あなたはコミットを逃していますか? –

+1

@dumb_terminalはい。リストはデータベースから取り込まれます。 –

+0

それから間違いなくそのアイテムはdbから削除されていません。ここには2つのものがあります。 1.削除ロジックが成功しません。 2.削除は成功しますが、変更はdbにコミットされません。 –

答えて

0

現在のアイテムの位置の値を渡して削除しようとしています。もちろんそれは動作しません!アイテムをIDまたはRecyclerView内の名前で取得する必要があります。後者は、データベース内のアイテムとRecyclerViewが同じ名前を持つことができないということを意味します。

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

アダプタ内では、同じ機能を呼び出しても、RecyclerViewの位置ではなく現在の項目のテキストを渡します。

+0

これで動作します。もともと、それは時々削除し、他の時代、それはそうではないでしょう。 –

+0

これは、アイテムを削除すると位置が変更され、間違った位置のアイテムを削除しようとしたためです。 – Razor