這個問題是關於管理對SQLiteDatabase的小改動的一種高效且適當的方式。對於disucssion目的,我們可以看看this code,我已經總結如下:如何使用光標支持RecyclerView時管理更新的SQLite數據
CursorRecyclerViewAdapter.java
public abstract class CursorRecyclerViewAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
public CursorRecyclerViewAdapter(Context context, Cursor cursor) {
public Cursor getCursor() {
public int getItemCount() {
@Override public long getItemId(int position) {
@Override public void setHasStableIds(boolean hasStableIds) {
public abstract void onBindViewHolder(VH viewHolder, Cursor cursor);
@Override public void onBindViewHolder(VH viewHolder, int position) {
public void changeCursor(Cursor cursor) {
public Cursor swapCursor(Cursor newCursor) {
private class NotifyingDataSetObserver extends DataSetObserver {
@Override public void onChanged() {
@Override public void onInvalidated() {
MyListCursorAdapter.java
public class MyListCursorAdapter extends CursorRecyclerViewAdapter<MyListCursorAdapter.ViewHolder>{
public MyListCursorAdapter(Context context,Cursor cursor){
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View view) {
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@Override public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) {
的場景如下:的應用程序的用戶需要在數據庫中的某條記錄上進行一些操作。在該動作的監聽器中,可以很容易地更改數據庫中的一條記錄,並確保視圖隨更改而更新。但是我的光標不再同步。我已經「解決」了問題的方式是重新查詢數據庫並交換所產生的新遊標。但是,這似乎是用錘子殺死一隻蒼蠅。我希望從RecyclerView.notifyDataSetChanged()
方法中獲得一些魔法,但它沒有做任何事情。
因此,給定一個Cursor
加載數據和一個小的改變,它是有效和適當的再次運行查詢,得到一個新的Cursor
並交換它,或者有更好的方法嗎?
答案在這裏:https://stackoverflow.com/questions/7973607/android-can-you-update-a-cursor-for-sqlite-results表示遊標無法更新,但內容提供商具有該功能。問題是,內容提供商應該在*應用程序之間使用,而不是在它們之間。 – Dale