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
包含对视图的引用,那么最终会泄漏整个视图及其上下文(很可能是一个活动)。否则,你就安全了。