2014-02-17 91 views
0

介紹ListFragment不會刷新

我有它由上胡亞蓉,我創造了一些元素,然後我上保存ListFragment此元素的應用程序。這種東西工作正常,但是當我嘗試從列表中刪除一個元素時出現問題。

簡而言之,當我刪除一個元素時,listFragment不會刷新。如果我回到主Activity,然後再次輸入到ListFragment,那麼我刪除的元素不會出現,但是在我刪除元素的時刻刷新此列表。

不得不說,我有點困惑,因爲一開始這樣做是正確的,但我不知道我曾經觸摸過什麼,現在不這樣做。

CODE

這是ListFragment的相關代碼片段:

public class MyPlacesListFragment extends ListFragment { 
//... 

    final class PlacesCursorAdapter extends ResourceCursorAdapter { 
    //... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     getAdapter(); 
    } 

    public void getAdapter() { 

     Cursor c = getActivity().getContentResolver().query(PlacesProvider.CONTENT_URI, PROJECTION, null, null, null); 

     mCursorAdapter = new PlacesCursorAdapter(getActivity(), c); 
     setListAdapter(mCursorAdapter); 
    } 

    private void deleteItem(long id){ 

      Uri uri = ContentUris.withAppendedId(PlacesProvider.CONTENT_URI, id); 
      getActivity().getContentResolver().delete(uri, null, null); 
    } 

我不得不說,我的數據庫和ContentProvider的工作,但這些做工精細,我和其他測試,他們應用。

另外,我呼籲插入,更新有NotifyChange(),並刪除供應商的方法是這樣的:

getContext().getContentResolver().notifyChange(uri, null); 
+0

您是否嘗試在適配器上調用'notifyDataSetChanged()'? –

+1

爲什麼jQuery標籤? – Archer

+0

@ super-qua我試過了,但我不知道我做得不錯。我應該在哪裏準確地稱呼它? – masmic

回答

2

只需撥打這個:

mCursorAdapter.notifyDataSetChanged(); 

後您更改了基礎數據。

此外,我建議重命名您的getAdapter()方法,因爲它有一個誤導性的名稱恕我直言。我期望它總是返回相同的適配器,而您似乎使用它來初始化新的適配器。

+0

有什麼關係?我必須在哪裏打電話?我嘗試過調用並且沒有工作,但也許我沒有在正確的位置執行它 – masmic

+0

getContext()。getContentResolver()。notifyChange –

+0

之後但是,我對提供程序getContent()。getContentResolver()。notifyChange類擴展了ContentProvider。這個類與ListFragment不同,並且CursorAdapter在ListFragment – masmic

1

chech this linkData for notifyDataSetChanged示例。其中包含如何使用以及何時使用的答案。 &如何使用。希望這可以幫助。

+0

感謝您的鏈接,正如我在那裏,notifydataSetChange需要實現適配器的添加,插入等方法,並且在這裏我使用提供者的方法,所以這對我不起作用。那麼,什麼纔是實現這個目標的正確途徑? – masmic