android - ViewPager 中光标驱动的内容

标签 android android-viewpager android-cursor

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

当前进程:

  1. 在主 Activity 中实例化光标。
  2. 创建我自己的 Cursor Adapter 类,该类从 PagerAdapter 扩展而来,它接收光标。光标用于通过 getCount() 确定 ViewPager 将具有的页面数(然后根据每页显示的项目数进行调整)。
  3. 在 Cursor Adapter getItem 方法中,它创建最终将包含列表子集的 fragment 。

现阶段,我不确定哪种方法最好。我是:

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

B.传入将获得结果的 ContentUris 字符串列表。 (这会阻止在无需重建的情况下更新列表吗?)

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

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

非常感谢您的帮助。

最佳答案

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

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

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

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

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

关于android - ViewPager 中光标驱动的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14083116/

相关文章:

ios - 水平 CollectionView Swift iO 中的垂直 CollectionView

android - 无法使用 Android 库项目进行编译

android - 任何人都可以帮我解决这些数据库查询吗

安卓:ActionBar 隐藏

android - ant 找不到 Android 项目的 pre_setup.xml

Android JobScheduler - 无法创建持久作业

android - 在android中使用CursorLoader代替startManagingCursor,数据库访问

javascript - PhoneGap 中的签名捕获

android - 使用 setCurrentItem(int index) 时,android PageAdapter 和 ViewPager 是否检查 indexoutofbounds 异常?

java - Android:在不延迟 Activity 的情况下在后台运行一个线程