bindView()和newView()在CursorAdapter中做了什么

时间:2012-10-01 11:53:39

标签: android android-cursoradapter

我的项目中有一个自定义CursorAdaptor,其中包含已覆盖的方法bindView(View view, Context context, Cursor cursor)newView(View view, Context context, Cursor cursor)。 我想知道CursorAdapter的用途是什么,以及覆盖bindView()newView()之间的区别和用途是什么。

我已阅读Developer Sitethis教程,但我仍然不理解。由于我是Android的初学者,请帮助我理解这个概念。

1 个答案:

答案 0 :(得分:125)

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

Android会为ListView维护一个视图池,它会提供给您,这样您就可以重复使用它,而不是每次都创建一个新视图。

BaseAdapter中,您将拥有一个名为getView()的函数,其中一个参数是名为View的{​​{1}}对象。基本上,如果首次加载列表,则此convertView将为convertView,一旦您开始滑动列表,它就不会是null。因此,在null的{​​{1}}方法中,您将检查getView()是否为BaseAdapter。如果是的话,你会膨胀它。然后,您可以使用视图并正常设置其元素。这将极大地提高列表视图的滚动性能。

当listview的数据源是数据库时,convertView使其易于使用。但是,在游标适配器中,Android负责检查null是否为CursorAdapter。在newView()方法中,您只需对视图进行充气并将其返回。在bindView()方法中,您可以设置视图的元素。

作为一个例子,想象一下设备上的列表视图,它可以在屏幕上显示多达11个列表项。在这种情况下,convertView最多会被调用11次。但是,只要滚动列表视图,就会多次调用null。在滚动列表时,您在newView方法中创建的11个视图将一次又一次地重复使用。