0

我有一个 ListView 来显示数据列表,我需要先从数据库中获取这些数据 - 加载发生在 AsyncTask 中。
现在我想在 AsyncTask 完成加载后立即刷新我的列表 - 我正在使用来调用adapter.notifyDataSetChanged();我的 Activity,但列表没有刷新。
完整代码:
在 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(); }

4

1 回答 1

2

每次刷新数据时都需要重新创建 Adapter 和 setAdapter,或者扩展 SimpleAdapter,因为 SimpleAdapter 构造函数克隆 listData 并使用它自己的,它没有任何方法来更新数据。

不要忘记,Java 不能通过引用传递参数。

于 2013-07-09T07:20:59.447 回答