Android:GridView with cursorAdapter

时间:2013-09-23 05:46:40

标签: android gridview adapter android-cursoradapter

您好我有一个应用程序使用GridView使用CursorAdapter从mediastore加载数据。它加载和功能除了GridView似乎通过调用适配器中的newView加载mediastore中的每个项目。

在logcat中,调用newView后会调用bindView。当我滚动只调用bindView的网格时,它工作正常。

看起来只有当我第一次在gridView上应用适配器时,才会为每个项调用newView和bindView。

这是以前的帖子,但还没有找到任何答案: Link to previous post

1 个答案:

答案 0 :(得分:2)

您描述的行为是 CursorAdapter 的工作方式。

CursorAdapter 具有内置的视图回收功能:

    如果需要新的视图对象实例,则会调用
  1. newView()
  2. 然后在此之后调用
  3. bindView()bindView()接收newView()之前返回的视图(不一定按相同顺序)。 bindView的工作是根据光标中的数据将视图设置为正确的状态。
  4. 现在,当您滚动时,一些视图会被推出可见区域,而新视图会被拖入可见区域。需要实例化新视图,并根据光标中的数据设置状态。这可以通过重复步骤1和步骤1来完成。 2。

    但是,通过视图回收,被推出可见区域的视图会被抛入“循环视图池”, CursorAdapter 将尝试重用这些视图并将其传递给{ {1}},因此跳过第1步(并保存资源)。

    那么为什么在设置适配器时会调用bindView()

    仅仅因为循环视图池是空的,没有视图滚动到可见区域之外,因此Cursor Adapter别无选择,只能调用newView()来获取新的视图实例,然后将其传递给newView()

    总结一下:

    • bindView():创建一个视图实例(通常使用布局inflater)
    • newView():根据光标数据(例如文字,图片,按钮等)设置作为参数接收的视图的状态。

    希望这可以解决一些困惑。