0

我想在我的活动中显示一个列表片段。列表片段适配器是一个使用典型ViewHolder模式的自定义适配器(从BaseAdapter扩展而来)。它被正确执行。ListFragment和asynctask问题android

我有适配器设置与greenrobot Eventbus从一个asynctask接收一个新的列表对象在后台查询(因为不减慢UI主线程)。

问题是列表片段最初没有数据库查询的结果,所以它默认为空(并显示我的XML文本视图为主要活动,其ID为'空')。

最后,我的适配器和listviewfragment根本没有得到实例化,因为它默认为空。

有没有更好的方法来做到这一点? 如何让我的listview片段等待从asyncTask收到的数据?

我打算只做一个带有listview的片段,而不是listview片段,我会看看这是否会有所帮助。

回答

0

由于我的理解正确,所以你做了一切正常。你需要做的是向你的适配器添加一个“更新”方法,每当你的asynctask完成它的工作并为你获得结果时就调用它。 此更新方法应该是这个样子

public void updateAdapterData(List<String> newList) { 
    mItems.clear(); // say mItems is the global list you have in the adpater 
    mItems.addAll(newList); 

    notifyDataSetChanged(); // This will cause the adpater to re-draw it's rows, so now data should be visible in your list 
} 

而在你的片段你服用点,如:

adpater.updateAdapterData(newList); 

这是否帮助?

+0

谢谢迈克。我已经有了它,它从异步任务获取onEvent方法,并将列表加载到适配器中。问题是片段本身没有被创建,或者适配器。由于数据最初是空的,因此当没有数据时,ListFragment的默认行为是显示id为空的视图资源。 – AnnonAshera 2014-10-17 19:33:24

+0

我真的不明白它是如何做到这一点的,因为它并不是在第一个地方创建的(我的日志不会在onattach或oncreateview中实例化,所以我可以告诉)。我正在研究ListFragment源,试图找出它。 – AnnonAshera 2014-10-17 19:35:09

+0

如果您仍然卡住,请提供一些代码,以便我可以帮助您! – Mike 2014-10-17 19:35:20