我有一个ListView来显示数据列表,我需要首先从数据库中获取数据 - 加载发生在AsyncTask中。
现在我想在AsyncTask加载完后立即刷新我的列表 - 我使用this在我的Activity中调用adapter.notifyDataSetChanged();
,但列表没有刷新。
完整代码:
在OnCreate :
adapter = new SimpleAdapter(ShopSwitchActivity.this, listData,
android.R.layout.simple_list_item_2,
new String[] {"name", "address"},
new int[] {android.R.id.text1,
android.R.id.text2});
listView.setAdapter(adapter);
AsyncTask<String, Void, List<Map<String,String>>> task = new LoadList(ShopSwitchActivity.this).execute();
try {
listData = task.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
任务完成后:
@Override
public void onTaskCompleted() {
adapter.notifyDataSetChanged();
}
listData = task.get();
返回预期的结果,它只是没有显示在列表中。
(没有崩溃或任何事情,每一行都被调用)
我在这里缺少什么?
编辑:工作代码:
@Override
public void onTaskCompleted() {
adapter = new SimpleAdapter(ShopSwitchActivity.this, listData,
android.R.layout.simple_list_item_2,
new String[] {"name", "address"},
new int[] {android.R.id.text1,
android.R.id.text2});
listView.setAdapter(adapter);
}
而不仅仅是
@Override
public void onTaskCompleted() {
adapter.notifyDataSetChanged();
}
答案 0 :(得分:2)
每次要刷新数据或扩展SimpleAdapter时都需要重新创建Adapter和setAdapter,因为SimpleAdapter构造函数克隆listData并使用它自己,并且没有任何方法来更新数据。
不要忘记,Java不能通过引用传递参数。