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

Jai*_*dra 25 android android-cursoradapter

CursorAdaptor我的项目中有一个自定义的方法bindView(View view, Context context, Cursor cursor)和覆盖方法newView(View view, Context context, Cursor cursor).我想知道什么CursorAdapter是用于什么,以及什么是覆盖bindView()和使用的区别和使用newView().

我已经阅读了开发者网站教程但仍然没有理解.由于我是Android的初学者,请帮助我理解这个概念.

Vin*_*noy 126

为了理解这一点,你必须先了解它是如何BaseAdapter工作的,因为它CursorAdapter是一个子类BaseAdapter.

Android ListView会为您提供一个视图池,以便您可以重复使用它,而不是每次都创建一个新视图.

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

CursorAdapter当listview的数据源是数据库时,A 使其易于使用.在光标适配器,不过,Android需要检查是否照顾convertViewnull或不是.在该newView()方法中,您只需为视图充气并将其返回.在该bindView()方法中,您可以设置视图的元素.

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

  • ViewHolder模式怎么样?今天在JB和所有新api中仍然有用吗? (6认同)
  • `ViewHolder`现在已被弃用,支持使用`void setTag(int,object)`和`object getTag(int)`,它允许你将对任何子视图的引用附加到父视图(`setTag(R.id.thing) ,thingView)`)然后快速返回它们(`getTag(R.id.thing)`将返回`thingView`). (6认同)
  • @AndrewWyld,这是ViewHolder模式 - http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder (6认同)