0

我使用自定義ContentProvider在android中插入和查詢sqlite數據庫。當我查詢數據庫,我正在通過列表視圖填充數據。但問題是當我插入行我想更新列表視圖也。通過內容提供者插入行後更新listview

我已經創建了自定義適配器,通過擴展CursorAdapter並收聽LoaderManager.LoaderCallbacks<Cursor>,現在當我通過context.getContentResolver().insert()函數插入行時,我想更新列表視圖。

我已經嘗試adapter.notifyDataSetChanged();插入行後,但listview沒有得到更新。

我看到的唯一選擇是restartLoader()有沒有其他的更新列表視圖?

這是我的插入代碼

context.getContentResolver().insert(

       ContentUris.withAppendedId(
         Uri.withAppendedPath(Columns.CONTENT_URI, 


              Columns.INSERT_LOGS), 

              Columns.LOGS), 

       values); 

我正在將應用程序的日誌,並顯示到列表視圖

這裏是內容提供商的代碼裏面

if(rowId > 0){ 


       Uri insertUri = ContentUris.withAppendedId(Columns.CONTENT_URI, rowId); 
       Log.e("inserted " , rowId+""); 

       getContext().getContentResolver().notifyChange(insertUri,null); 
       return insertUri; 

      } 
+0

顯示您的ContentProvider插入方法的樣子。你不應該使用adapter.notifyDatasetChanged時使用裝載機 – tyczj 2014-10-08 19:16:56

+0

如果我動態添加任何行然後我的列表視圖沒有得到更新 – Hunt 2014-10-08 19:23:48

+0

就像我說的在您的內容提供商發佈您的代碼插入方法只是爲例 – tyczj 2014-10-08 19:38:40

回答

1

我認爲,你可以看看它是如何工作的this example,因爲它也是基於Loaders

Please take a look at it too.

了,我想你的煩惱和問題是我如何做。

這是正確的。

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
    ... 
    adapter.swap(cursor) 
    dataAdapter.notifyDataSetChanged(); 
    listView.SetAdapter(dataAdapter); 
    ... 
} 
+0

沒了,這不是爲'onLoadFinished'只調用一次和交換方法已經更新列表視圖,從而無需調用notifyDataStateChanged並重新設置適配器 – Hunt 2014-10-08 19:28:42

+0

當然的解決方案,這是沒有直接的解決方案,你需要修改,但這可能會導致你更好地理解。這是我的目標。親切的問候 – 2014-10-08 19:38:12