我一直在學習Android Loaders並試圖用AsyncTaskLoader實現一個。在方向變化LoaderManager調用onLoadFinished但沒有設置列表
我一直很成功,從而使這更討厭:P
我onLoadFinished功能如下:
@Override
public void onLoadFinished(Loader<JSONArray> arg0, JSONArray data) {
// TODO Auto-generated method stub
setProgressBarIndeterminateVisibility(false);
mLoadedData = data;
//Log.d("here","dosomething");
//Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show();
//Log.d("json",mLoadedData.toString());
Fragment f = getSupportFragmentManager().findFragmentByTag("pub_list");
((BP_Fragment) f).set_result(mLoadedData);
}
在我的片段的set_result功能如下:
public void set_result(JSONArray data) {
// TODO Auto-generated method stub
//Toast.makeText(getSherlockActivity(), "set result is called..", Toast.LENGTH_SHORT).show();
Log.d("pubs",data.toString());
for (int i = 0; i <data.length(); i++){
Log.d("string","here");
JSONObject c;
try {
c = data.getJSONObject(i);
String id = c.getString("pid");
String name = c.getString("name");
String town = c.getString("town");
String county = c.getString("county");
//Double score=c.getDouble(criteria);
//Log.d("score",score);
//HashMap<String, String> map = new HashMap<String, String>();
pubs.add(new PubListDetails(id,name,town,county,1.0,"pub"));
//map.put(TAG_PID, id);
//map.put(TAG_NAME, name);
//productsList.add(map);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
PubListAdapter adapter = new PubListAdapter(getSherlockActivity(), pubs);
// Toast.makeText(getSherlockActivity(), "This is called", Toast.LENGTH_SHORT).show();
setListAdapter(adapter);
}
我使用LoaderManager調試器來檢查加載程序正在保留..它是。我已經使用控制檯日誌來輸出我的數據從set_result函數內 - 數據是在那裏每個方向的變化.. IE的一切都被調用,並且一切都按照建議傳遞YET set_adapter只在第一次設置數據到列表,當它被保留的加載程序調用時調用no。
爲什麼? :P我迷失了方向。
THanks
你試過在適配器上調用'notifyDataSetChanged()'嗎? –
數據集沒有改變它只是沒有完成在旋轉點加載。旋轉後,我看到加載完成,但setListAdapter不起作用。 –