我看了this question,说它不用担心,但我想我需要一些保证。
我的自定义CursorAdapter的bindView:
@Override
public void bindView(View view, Context context, Cursor c) {
// get handles for views in xml
ImageView imageView = (ImageView)view.findViewById(R.id.add_lvrow_image);
TextView titleView = (TextView)view.findViewById(R.id.add_lvrow_title);
// get data from cursor and "massage" if necessary
String imageUri = c.getString(c.getColumnIndex(CollectionsTable.COL_IMAGEURI));
String title = c.getString(c.getColumnIndex(CollectionsTable.COL_TITLE));
// terrible time getting run-time sizes of imageView, hardcode for now
int XML_WIDTH = 100;
int XML_HEIGHT = 100;
Log.d(TAG, SCOPE + "bindView called: " +count);
count++;
// use static util class
ImageUtils.loadBitmap(context, imageUri, imageView, XML_WIDTH, XML_HEIGHT);
我正在关注series of Android tutorials for loading large bitmaps,但已移动decodSmapledBitmapFromUri
,calculateInSmapleSize
,loadBitmap
,BitmapWorkerTask
,AsyncDrawable
,{{1} }和cancelPotentialWork
到实用程序文件夹。
...所以我正在调用getBitmapWorkerTask
并且链接77次,因为列表视图当前有12行(在加载时屏幕上显示6个,只有第7个显示的提示)。
所以我不应该担心,这是可以的(对bindView的调用次数以及所有后续方法的触发)?
谢谢你的话。
答案 0 :(得分:9)
如果在你的listview中xml android:layout_height不是“match_parent”,则将其更改为android:layout_height="match_parent"
答案 1 :(得分:2)
为每个新创建的视图调用newView
方法,而在需要每个视图数据绑定到相应视图时调用bindView
。导致bindView
被多次调用的原因之一是listview回收,它回收了视口外的视图。例如,当您滚动列表视图时,每个进入查看端口的新视图都会调用bindView
。如果您的loadBitmap
资源密集,我建议您创建一个缓存机制,这样您就不应该为每个loadBitmap
来电拨打bindView
。