Android bindView()和newView()在CursorAdapter中的作用

Android bindView()和newView()在CursorAdapter中的作用,android,android-cursoradapter,Android,Android Cursoradapter,在我的项目中,我有一个自定义的CursorAdaptor,它使用被重写的方法bindView(视图视图、上下文、光标)和newView(视图、上下文、光标)。 我想知道CursorAdapter的用途,以及覆盖bindView()和newView()的区别和用途 我已经读了这本书和教程,但还是不明白。由于我是Android的初学者,请帮助我理解这个概念。为了理解这一点,您必须首先了解它的工作原理,因为它是BaseAdapter的一个子类 Android为它将提供给您的列表视图维护一个视图池,这样

在我的项目中,我有一个自定义的
CursorAdaptor
,它使用被重写的方法
bindView(视图视图、上下文、光标)
newView(视图、上下文、光标)
。 我想知道
CursorAdapter
的用途,以及覆盖
bindView()
newView()
的区别和用途


我已经读了这本书和教程,但还是不明白。由于我是Android的初学者,请帮助我理解这个概念。

为了理解这一点,您必须首先了解它的工作原理,因为它是
BaseAdapter
的一个子类

Android为它将提供给您的
列表视图维护一个视图池,这样您就可以重用它,而不是每次都创建一个新视图

BaseAdapter
中,您将调用一个函数,其中一个参数是名为
convertView
视图
对象。基本上,如果第一次加载列表,则此
convertView
将为
null
,而一旦开始滑动列表,它将不会为
null
。因此,在
BaseAdapter
getView()
方法中,您将检查
convertView
是否为
null
。如果是的话,你会给它充气。然后可以使用该视图并将其图元设置为普通图元。这将极大地提高listview的滚动性能

当listview的数据源是数据库时,
CursorAdapter
使其易于使用。然而,在游标适配器中,Android负责检查
convertView
是否为
null
。在该方法中,只需膨胀视图并返回它。在方法中,设置视图的元素


例如,设想一个设备上的listview可以在屏幕上显示多达11个列表项。在这种情况下,
newView()
最多会被调用11次。但是,每当您滚动列表视图时,
bindView()
将被多次调用。滚动列表时,您在newView方法中创建的11个视图将被反复使用。

一个用于创建新的可重用布局,另一个用于将光标数据绑定到该视图CursorAdapter的基本前提是管理数据库中的光标对象。这里引用docs的一句话:“将数据从游标公开到ListView小部件的适配器。”那么ViewHolder模式呢?它现在在JB中还有使用吗?所有新api的
ViewHolder
现在都不推荐使用
void setTag(int,object)
object getTag(int)
,它允许您将对任何子视图的引用附加到父视图(
setTag(R.id.thing,thingView)
)中,然后快速将它们返回(
getTag(R.id.thing)
将返回
thingView
)。@andrewyld,这是ViewHolder模式-@andrewyld,那个特定的开发博客由于某种原因删除了帖子…-)。。是的,我知道是这样,但是将
ViewHolder
与setTag(int,holder)一起使用会在pre-ICS中造成严重问题。我仍然更喜欢ViewHolder,因为我发现它的实现更干净。。。我只需要小心使用ICS之前的设备。在ICS之前的设备上,如果使用
setTag(int,tag)
,其中
tag
包含对
视图的引用,那么最终会泄漏整个视图及其上下文(很可能是一个活动)。否则,你就安全了。