您好我有一个应用程序使用GridView使用CursorAdapter从mediastore加载数据。它加载和功能除了GridView似乎通过调用适配器中的newView加载mediastore中的每个项目。
在logcat中,调用newView后会调用bindView。当我滚动只调用bindView的网格时,它工作正常。
看起来只有当我第一次在gridView上应用适配器时,才会为每个项调用newView和bindView。
这是以前的帖子,但还没有找到任何答案: Link to previous post
答案 0 :(得分:2)
您描述的行为是 CursorAdapter 的工作方式。
CursorAdapter 具有内置的视图回收功能:
newView()
。bindView()
,bindView()
接收newView()
之前返回的视图(不一定按相同顺序)。 bindView的工作是根据光标中的数据将视图设置为正确的状态。现在,当您滚动时,一些视图会被推出可见区域,而新视图会被拖入可见区域。需要实例化新视图,并根据光标中的数据设置状态。这可以通过重复步骤1和步骤1来完成。 2。
但是,通过视图回收,被推出可见区域的视图会被抛入“循环视图池”, CursorAdapter 将尝试重用这些视图并将其传递给{ {1}},因此跳过第1步(并保存资源)。
那么为什么在设置适配器时会调用bindView()
?
仅仅因为循环视图池是空的,没有视图滚动到可见区域之外,因此Cursor Adapter别无选择,只能调用newView()
来获取新的视图实例,然后将其传递给newView()
。
总结一下:
bindView()
:创建一个视图实例(通常使用布局inflater)newView()
:根据光标数据(例如文字,图片,按钮等)设置作为参数接收的视图的状态。希望这可以解决一些困惑。