刷新我的ListView似乎无法正常工作

时间:2013-07-09 07:15:57

标签: android listview android-asynctask adapter

我有一个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(); }

1 个答案:

答案 0 :(得分:2)

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

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