【发布时间】:2023-03-09 09:13:01
【问题描述】:
我一直在学习 Android 加载器,并尝试使用 AsyncTaskLoader 来实现。
我已经非常成功了,这让这变得更加烦人: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 仅在第一次将数据设置到列表中, 当它被保留的加载器调用时,不会。
为什么? :P 我很困惑。
谢谢
【问题讨论】:
-
您是否尝试在适配器上调用
notifyDataSetChanged()? -
数据集没有改变,只是在旋转点还没有完成加载。旋转后,我看到加载完成但 setListAdapter 不起作用..
标签: android android-asynctask android-loadermanager android-loader