2

我想在列表中显示光标中的一些(5-ish)项目,并且我想让它与光标的内容(又指向数据库)保持同步,但我不不想使用 ListViews。相反,我想填充一个普通的旧线性布局。

我似乎明白我需要创建一个自定义 CursorAdapter 并覆盖 newView() 和 bindView() 方法。我不明白谁负责迭代光标的项目(CursorAdapter 会这样做吗?我的代码应该这样做吗?),每个项目的视图如何成为 LinearLayout 的父级以及谁负责创建新的光标中新项目的视图或删除不再通过光标可用的项目的视图?

不知何故,我有一种预感,即 CursorAdapter 已经完成了大部分工作,但我无法将所有拼图拼凑在一起。我是否只是在 newView() 中膨胀一个行布局并将其直接添加到 LinearLayout 中?如果游标不再有关联的数据,如何删除一行?

谢谢你的帮助!

马努

4

3 回答 3

1

好吧,我会做以下事情:

  • 创建一个自定义类,LinearLayout 的子类,只是为了简单。让我们称之为 MyList
  • 您将 CursorAdapter 实例传递给此类(例如,创建一个 setAdapter 方法)
  • 当接收到适配器时,MyList 将注册数据更改(CursorAdapter.registerDataSetObserver)。当数据集发生变化时,调用方法“populate”
  • 接收到适配器时,也直接调用“填充”,获取初始内容
  • 实现 MyList.populate: ** 为每个项目调用 removeAllViews **(遍历光标)调用 addView(CursorAdapter.newView(getContext(), cursor, this))

简而言之就是这样。当然,稍后您可能希望对其进行优化,并保留旧视图并改用 CursorAdapter.bindView,这样您就不需要创建新的重型 java 对象。

于 2011-10-21T22:25:39.487 回答
1

CursorAdapter 允许您导航一个大列表,而无需将所有项目加载到内存中。如果您只想拥有少量项目,那么我会在您的活动中迭代它们并相应地更新您的视图(添加视图、设置文本值、显示/隐藏等)

于 2011-10-21T22:26:06.337 回答
1

使用CursorLoader。当您的内容发生变化时,它会自动更新。

于 2011-10-21T22:26:49.957 回答