【问题标题】:How to force my GridView adapter to reload?如何强制我的 GridView 适配器重新加载?
【发布时间】:2013-08-08 21:11:52
【问题描述】:

我是一名从 Fragment 开始的 Android 初学者。我的问题如下。 我有一个用于显示自定义列表视图的片段(它扩展了 SherlockListFragment)。我用一些数据服务器填充了列表视图。检索服务器数据的操作在另一个线程中执行,我有一个处理程序来管理响应。在这个处理程序中(在我的片段内),我为我的适配器恢复了数据,并像这样 ((myAdapter) fragment.getListAdapter()).dataChange(); 重新加载了我的适配器。 好吧,现在我想将列表转换为自定义网格,因为我认为这对我的应用程序来说要好得多。所以,片段不扩展 SherlockListFragment,而是 BaseFragment。因为我不再有 ListView,所以我不能不使用“getListAdapter.datachange()”。有人知道这样做的正确方法吗? 提前致谢。

【问题讨论】:

    标签: android gridview fragment handler adapter


    【解决方案1】:

    为从 BaseAdapter 扩展的 gridview 制作一个 Adapter,或者使用从 BaseAdapter 扩展的 Adapter。

    然后当您的集合的内容发生更改时,在该适配器上调用 notifyDataSetChanged。

    Small example of adapter and grid

    【讨论】:

      【解决方案2】:

      我建议您在适配器上进行更改,而不是在网格(或列表)上。根据您使用的适配器类型,有几种不同的方法。

      阵列适配器

      对于ArrayAdapter,使用标准修改方法(addaddAllclearremove)应该更新所有视图。

      光标适配器

      CursorAdapter 的工作方式大致相同,只是您使用swapCursorchangeCursor 来更改基础数据。这应该通知所有数据集观察者基础数据已更改。

      所有适配器

      如果您的观察者没有收到通知,通常是因为调用了setNotifyOnChange,您可以调用mAdapter.notifyDataSetChanged() 来手动更新底层数据已更改的所有侦听器(UI 视图、服务等)。

      【讨论】:

        【解决方案3】:

        非常感谢您的快速回复。我尝试了你的想法,但最后我通过制作两列的行将我的旧列表转换为网格。这是保持页眉和页脚打开的最佳选择。

        【讨论】:

        • 现在,我的新问题是如何分别选择每一行的“两个项目”,因为onListItemClick现在不起作用。
        猜你喜欢
        • 1970-01-01
        • 2019-08-29
        • 2023-03-07
        • 2015-06-24
        • 1970-01-01
        • 2012-11-04
        • 2020-09-13
        • 2016-12-28
        • 2016-02-11
        相关资源
        最近更新 更多