2014-03-25 73 views
0

我在通知CursorAdapter數據已更改時遇到問題。用的AsyncTask從asynctask更新CursorAdapter

public class MyListFragment extends ListFragment implements LoaderCallbacks<Cursor> { 

    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
      return new MyListCursorLoader(getActivity()); 
     } 


     public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
      MyCursorAdapter adapter = new MyCursorAdapter(getActivity(),(MyCursor)cursor); 
      setListAdapter(adapter); 
     } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getLoaderManager().initLoader(0, null, this); 
    } 

    private static class MyCursorAdapter extends CursorAdapter { 

    ... some code ... 

    } 

    private static class MyListCursorLoader extends SQLiteCursorLoader { 

    ... code ... 

    } 

SQLite數據庫更新(有公共接口和ListFragment與聽衆實現它),我嘗試刷新ListAdapter與onPostExecute,但我真的不知道怎麼辦。

的AsyncTask代碼

public class MyDownloader extends AsyncTask<Void, Void, Void> { 

    public interface OnMyDownloaded { 
     void onMyDownloaded(); 
    } 


    public JSONDownloader(Context context, OnMyDownloaded listener) { 

      ...code... 

    } 

    protected Void doInBackground(Void... params) { 
      ...code... 
    } 


    protected void onPostExecute(Void result) { 
     listener.onMyDownloaded(); 
    } 

請幫助我明白我應該MyListFragment內部類做

private class OnEventDownloaded implements OnJSONDownloaded { 
    ????? 
} 

回答

0

您可以撥打getLoaderManager().restartLoader(int id, Bundle args, LoaderCallbacks<D> callback); 它將調用onCreateLoader,所以加載器將被重新創建。如果我正確理解你的話。

+0

這是我第一次嘗試。但是在fragment中實現的回調函數類似於'getLoaderManager()。restartLoader(0,null,this);',但是我應該如何從內部類中調用回調函數? –

+0

我懂了。我問從構造的AsyncTask回調:'公共MyDownloader(上下文的背景下,LoaderCallbacks 回調,OnMyDownloaded聽衆){ \t \t \t \t ... ...代碼 \t}' 並呼籲'getLoaderManager() .restartLoader(0,null,callback);'來自監聽器(但我認爲它也可以從onPostExecute工作)。 –

+0

是的,你是對的。上帝保佑! – Shamm