notifyDatasetChanged()不更新listview

时间:2014-04-16 06:37:38

标签: android listview

我在操作栏上有一个微调器,在片段中有一个列表视图。 Spinner包含一些文件夹结构,当选择一些文件夹时,它将通过onItemSelected回调中的notifyDatasetChanged()更新微调器数据源并清除listview数据,然后,它将调用runnable来加载文件夹的新数据并向处理程序发送消息通过notifyDatasetChanged()更新listview适配器。问题是当处理程序接收消息和更新适配器时,listview没有改变并且将保持为空,不会调用getview()方法。

似乎问题发生在4.1.1上,而不是4.3上。

由于我需要支持2.3或更高版本,请给我一些建议或解决方法来解决它。

e.g。

onItemSelected(){
    backward(folder);
}

backward(folder){
    notifyDatasetChanged() for spinner;

    clearListViewDataAndNotifyDatasetChanged();

    loadDataForFolderInRunnable();
}

loadDataForFolderInRunnable(){
    getDataFromHttp();

    sendMessageToHandler();
}

handler(){
    updateDataSourceForListView();

    notifyDatasetChanged();
}

我发现如果在onItemSelected()回调中调用notifyDatasetChanged(),那么listview就不能再刷新了。

android的项目成员告诉我这个问题已得到修复。有谁知道如何解决它或一些工作单?

提前致谢!

1 个答案:

答案 0 :(得分:0)

可能线程没有完成加载数据,并且在数据仍在加载时更新列表视图..对于您的处理程序,请尝试以下操作:

handler.post(new Runnable() {
@Override
public void run() {
    notifyDataSetChanged();
    listView.setAdapter(adapter);
}
});