动态从Cursor到LinearLayout的项目列表,不使用ListView

时间:2011-10-21 22:13:32

标签: android android-linearlayout android-cursoradapter

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

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

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

感谢您的帮助!

马努

3 个答案:

答案 0 :(得分:1)

好吧,我会做以下事情:

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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