我的项目中有一个自定义CursorAdaptor
,其中包含已覆盖的方法bindView(View view, Context context, Cursor cursor)
和newView(View view, Context context, Cursor cursor)
。
我想知道CursorAdapter
的用途是什么,以及覆盖bindView()
和newView()
之间的区别和用途是什么。
我已阅读Developer Site和this教程,但我仍然不理解。由于我是Android的初学者,请帮助我理解这个概念。
答案 0 :(得分:125)
为了理解这一点,您必须首先了解BaseAdapter
的工作原理,因为CursorAdapter
是BaseAdapter
的子类。
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个视图将一次又一次地重复使用。