簡體   English   中英

使用不同的loadermanager的多個片段

[英]Multiple fragments with different loadermanager

我是android開發的新手,過去4個小時一直在尋找解決方案。

我在一個Activity中有2個片段,它們都使用不同的sqlite表存儲數據,然后將其放入適配器以在片段中顯示。

我正在使用Loader管理器為兩個片段創建了兩個不同的加載器(具有不同的ID)。 我在每個片段中定義Loader回調函數。 問題是當我使用一個片段加載數據時,該片段的OnCreateLoader中為第二個片段返回空數據。

這是我在一個片段中實現的代碼:

    @Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    if (id==1){
        String[] projection = {
                NoticeTable.COLUMN_ID,NoticeTable.COLUMN_TITLE
        };
        CursorLoader cursorLoader = new CursorLoader(this,
                NoticeContentProvider.ALL_NOTICE_URI, projection, null, null, null);
        return cursorLoader;
    }
    else{
        return null;
    }
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

    switch (loader.getId()) {
        case 1:
            adapter.swapCursor(data);
            break;
        case 0:
            break;
    }
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    switch (loader.getId()) {
        case 1:
            adapter.swapCursor(null);
            break;
        case 0:
            break;
    }
}

如果將所有LoaderManager函數放入每個Fragment中,那么應該沒有問題。 設置如下:

public class FragOne extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {}
public class FragTwo extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {}

然后,您可以在Fragment的onResume或類似的東西中初始化加載程序,這樣它將獨立於其他Fragment起作用。

我想建議使用常量變量作為加載程序ID。 我傾向於這樣做:

public class FragOne extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
   private static final int FRAG_ONE_LOADER = 0;

   public void onLoaderReset(Loader<Cursor> loader) {
      switch(loader.getId()) {
         case FRAG_ONE_LOADER:
            doStuff();
            break;
         default:
            break;
      }
   }
}

由於已將邏輯分為每個片段,所以FragmentOne將永遠不會看到或訪問ID為FRAG_TWO_LOADER的加載程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM