2015-06-11 38 views
0

我在嘗試讓新的數據添加到內容提供商時刷新ListView以進行刷新時遇到了問題。即使我調用notifyChange(uri,null),ListView也不會更新;雖然內容提供商

閱讀在這個問題上相近崗位,我就確定我的查詢方法使用getContext().getContentResolver().notifyChange(uri, null);我的插入方法和 c.setNotificationUri(getContext().getContentResolver(), uri);(談論的內容提供商類)。

我實現LoaderManager.LoaderCallbacks<Cursor>在我的活動:

@Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     return new CursorLoader(ChatWindowActivity.this, 
           DatabaseContentProvider.getConversationUri(conversationId), 
           PROJECTION, null, null, null); 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     switch (loader.getId()) { 
      case LOADER_ID: 
       mAdapter.swapCursor(cursor); 
       break; 
      } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 
     mAdapter.swapCursor(null); 
    } 
} 

而我使用的是getItemViewType自定義光標適配器,getViewTypeCountnewViewbindView覆蓋(類擴展CursorAdapter

在我的服務,我調用service.getContentResolver().insert(...,values),但活動ListView不會更新,除非我關閉並重新打開應用程序。

這可能是什麼原因造成的?

回答

0

我已經設法解決這個問題,但在這裏發帖以防萬一以後幫助別人。

問題出在getContext().getContentResolver().notifyChange(uri, null);。內容提供商將僅通知在特定的 URI上發生的更改。

所以我必須確保CursorLoader和插入調用完全相同的URI工作。即使像'/contacts/1'到'/contacts'這樣的小差別也不會通知遊標被改變。