【问题标题】:ListFragment and asynctask issues androidListFragment 和 asynctask 问题 android
【发布时间】:2014-10-17 19:10:23
【问题描述】:

我正在尝试在我的活动中间显示一个列表片段。列表片段适配器是具有典型 ViewHolder 模式的自定义适配器(从 BaseAdapter 扩展)。正确执行。

我使用 greenrobot Eventbus 设置了适配器,以从在后台执行查询的 asynctask 接收新的 List 对象(以免减慢 UI 主线程的速度)。

问题是列表片段最初没有数据库查询的结果,因此它默认为空(并在我的 xml 中显示 id 为“空”的主要活动的文本视图)。

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

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

我将只做一个包含列表视图的片段,而不是列表视图片段,我会看看是否有帮助。

【问题讨论】:

    标签: android android-fragments android-asynctask adapter greenrobot-eventbus


    【解决方案1】:

    正如我正确理解的那样,到目前为止,您所做的一切都很好。您需要做的是向您的适配器添加一个“更新”方法,并在您的 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);
    

    这有帮助吗?

    【讨论】:

    • 谢谢迈克。我已经有了这个,它从异步任务中获取 onEvent 方法并将 List 加载到适配器中。问题是没有创建片段本身或适配器。由于数据最初是空的,所以 ListFragment 在没有数据时的默认行为是显示 id 为空的视图资源。
    • 我真的不明白它是如何做到的,因为它不是一开始就被创建的(例如,我的日志在 onattach 或 oncreateview 中没有关闭,所以我可以知道) .我正在研究 ListFragment 源,试图弄清楚。
    • 如果你仍然卡住,请提供一些代码,我可以帮助你!
    • 粘贴在代码中。道歉有很多。我试图删除与问题无关的任何内容。
    • 我也有点困惑,它说要使用 Fragment 标签和 android:name 属性将 xml 中的片段添加到活动中。但是,对于文档中的 ListFragment,它说在您的 xml 中有一个以 android 列表作为 id 调用的列表视图。哪一个?我在这里遗漏了什么明显的东西吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多