【问题标题】:Cursor-driven content in ViewPagerViewPager 中的光标驱动内容
【发布时间】:2013-01-05 01:10:58
【问题描述】:

我想使用 ViewPager 从单个光标(最初来自 ContentProvider)中显示每页的多个项目。布局将显示为网格,并将包括每个项目的图像和文本。列表中会有频繁的添加和删除,需要在 UI 中反映出来,而无需重建数据结构(这可能会排除下面的一些选项)。

当前进程:

  1. 在主要活动中实例化光标。
  2. 创建我自己的从接受光标的 PagerAdapter 扩展的光标适配器类。光标用于通过 getCount() 确定 ViewPager 将拥有的页数(然后根据每页显示的项目数进行调整)。
  3. 在 Cursor Adapter getItem 方法中,它创建最终将包含列表子集的片段。

在这个阶段,我不确定哪种方法最好。我:

A.将 Cursor 和索引传递给 Fragment 以显示下一页结果(例如,具有 setCursorIndex(Cursor, int) 方法。(即使在同一个 Activity 中,跨 Fragments 共享 Cursors 也会导致问题吗?) em>

B.传入将获得结果的 ContentUris 字符串列表。 (这是否会阻止更新列表而无需重建?)

C.构建一个包含项目的参数包(包含图像和文本的字节数组的列表)。 (由于使用图像,这似乎效率低下。)

D.在从适配器接收到起始索引的每个片段中重新创建一个新光标。 (效率低下?)

非常感谢您的帮助。

【问题讨论】:

    标签: android android-viewpager android-cursor


    【解决方案1】:

    恕我直言,答案是 B 和 C 的某种组合。

    它是 C,只要您创建一个参数 Bundle 并将其提供给 Fragment,可能使用工厂方法模式(例如,newInstance())。这样,在配置更改期间,如果片段将被销毁并重新创建,您将拥有片段中的所有数据。

    但是,“包含图像和文本的字节数组的列表”似乎不合适。如果您已经有图像的Uri 值(或Uri 值的String 表示),请将那些 放在Bundle 中,并使用集中式图像缓存解决方案(例如@ 987654321@ 或 this one) 以确保您仅在需要时加载这些图像。其他小东西(“和文本”)可以直接进入Bundle

    选项 A 可能可行,但您必须小心考虑:

    • 配置更改(当用户旋转屏幕并且您的 Activity 被销毁/重新创建时会发生什么情况?)
    • Cursor 中的隐式当前行指针(在尝试读取任何数据之前,每个片段都需要 moveToPosition()

    【讨论】:

    • 另一种选择不是让Activity 通过Loader 获得完整的Cursor,并让每个Fragment 在其Activity 类中使用Cursor执行?当然,随着加载器完成加载时更新当前可见的FragmentViewPager
    • @Luksprog:这就是我设想的 OP 选项 A 的意思。可能是我误解了 OP 或您的评论。
    • 是的,我指的是选项A,但FragmentsActivity 检索Cursor 数据。我认为让每个Fragment 查询ContentProvider 的目标数据会更有效(取决于ViewPager 将显示多少页)。
    • 感谢 cmets 伙计们,他们给了我前进的道路。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-11
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多