2

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

当前流程:

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

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

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

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

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

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

非常感谢您的帮助。

4

1 回答 1

2

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

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

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

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

  • 配置更改(当用户旋转屏幕并且您的活动被销毁/重新创建时会发生什么?)
  • 中的隐式当前行指针(每个片段在尝试读取任何数据之前Cursor都需要)moveToPosition()
于 2012-12-29T15:40:06.800 回答