2016-11-19 50 views
0

這個問題是關於管理對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並交換它,或者有更好的方法嗎?

+0

答案在這裏:https://stackoverflow.com/questions/7973607/android-can-you-update-a-cursor-for-sqlite-results表示遊標無法更新,但內容提供商具有該功能。問題是,內容提供商應該在*應用程序之間使用,而不是在它們之間。 – Dale

回答

0

儘管重新運行完整查詢的想法似乎效率很低,但this example on github可能用於檢查重新查詢大量記錄的影響。在主要列表活動的onCreate()中,您可能會在repository.insertSome(n);中輸入大量數字。對於1000條記錄等,設置n爲40左右。

現在,當用戶對其中一個記錄(長按)執行操作時,會更新數據庫,模型和視圖,並創建一個新的遊標通過重新查詢。雖然數據庫中有很多記錄,但查詢似乎沒有使用太多的資源(即它似乎很快響應)。