2014-02-20 117 views
0

介紹刷新列表

我使用一個數據庫和ContentProvider的填充ListFragment。問題是,ListFragment是沒有得到刷新刪除商品後,我不得不關閉並重新打開該應用顯示在列表中添加的項目。

我以前好這方面的工作,但我修改的代碼做了之後,這已經開始發生,我不知道如何解決。

是什麼原因導致這種

從我的主要活動描述,我通過打電話的意圖ListFragment。由於片段不能通過intent直接調用,因此我調用FragmentActivity,該功能僅用於啓動ListFragment。

[Main] >> [FragmentActivity] >> [ListFragment] 

正如我要處理單或雙窗格中,我創建了contais的片段的佈局,這被稱爲list_layout

FragmentActivity:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_layout); 
    //... 

    if (mDualPane){ 
     MyPlacesListFragment listFragment = new MyPlacesListFragment(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.add(R.id.list_fragment, listFragment).commit(); 
    } 
    else { 
     MyPlacesListFragment listFragment = new MyPlacesListFragment(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.add(android.R.id.content, listFragment).commit(); 
    } 
} 

list_layout.xml:(對於單窗格視圖,對於雙窗格將是相似的,但在水平方向和添加的FrameLayout容器)

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <fragment 
     class="com.final.reversegeocoding.MyPlacesListFragment" 
     android:id="@+id/list_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

的ListFragment使用ResourceCursorAdapter所以我用newVew和bindView方法。我只會把代碼引用到如何誇大類的屁股,我已檢查其他代碼功能是否做得很好。不得不說,我誇大android.R.layout.simple_list_item_2,因爲這是我需要填寫列表中的佈局。

ListFragment:

final class PlacesCursorAdapter extends ResourceCursorAdapter { 
    private final LayoutInflater mInflater; 

    public PlacesCursorAdapter(Context context, Cursor c) { 
     super(context, android.R.layout.simple_list_item_2, c, 0); 
     //... 

    public View newView(Context context, Cursor cursor, ViewGroup parent) { 

     View view = mInflater.inflate(android.R.layout.simple_list_item_2, parent, false); 
     //... 

結論

之前,我我以前不設置在FragmentActivity的setContentView(R.layout.list_layout);,它這樣做是正確的刷新時我刪除了一個項目。

但由於我必須處理單個或雙重窗格,我一直被迫做這個,現在,當我刪除一個項目,列表刷新,但因爲它包含在FragmentActivity的list_layout,這不是刷新直到我退出並再次進入活動,該列表不會在其內部被刷新。

所以我的問題是:如何修改此代碼以獲取佈局刷新而不必退出ListFragment?

+0

你發佈了很多不相關的代碼,但沒有發佈什麼重要的:ContentProvider和你如何刪除一個項目 – pskink

+0

@pskink正如我所說的,contentProvider的代碼是O K.我之前就使用過它,並且它的功能正確。它已經開始做錯了,因爲我已經聲明瞭'list_layout',所以對提供者的方法不存在問題,這是佈局刷新的問題。 – masmic

回答

0

修改數據後,調用adapter.notifyDataSetChanged(),它會刷新你的數據

+0

我這樣做。再一次,這不是提供者和適配器的問題,是佈局聲明的問題。設置在FragmentActivity上的'list_layout'不會更新,直到我退出並再次輸入。 – masmic

0

嗯,在我知道它有一些東西要與佈局後說。我不得不修改list_layout,我把它叫做上FragmentActivity的方式,它已開始重新工作。

FragmentActivity:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_layout); 

    MyPlacesListFragment listFragment = new MyPlacesListFragment(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.list_fragment, listFragment).commit(); 
} 

list_layout.xml:(對於單窗格視圖,對於雙窗格將是相似的,但在水平方向和添加的FrameLayout容器)

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Framelayout 
     android:id="@+id/list_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout>