自定义CursorAdapater的bindView调用了77次......我做错了什么?

时间:2013-06-07 19:19:15

标签: android android-cursoradapter

我看了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,但已移动decodSmapledBitmapFromUricalculateInSmapleSizeloadBitmapBitmapWorkerTaskAsyncDrawable,{{1} }和cancelPotentialWork到实用程序文件夹。

...所以我正在调用getBitmapWorkerTask并且链接77次,因为列表视图当前有12行(在加载时屏幕上显示6个,只有第7个显示的提示)。

所以我不应该担心,这是可以的(对bindView的调用次数以及所有后续方法的触发)?

谢谢你的话。

2 个答案:

答案 0 :(得分:9)

如果在你的listview中xml android:layout_height不是“match_parent”,则将其更改为android:layout_height="match_parent"

答案 1 :(得分:2)

为每个新创建的视图调用newView方法,而在需要每个视图数据绑定到相应视图时调用bindView。导致bindView被多次调用的原因之一是listview回收,它回收了视口外的视图。例如,当您滚动列表视图时,每个进入查看端口的新视图都会调用bindView。如果您的loadBitmap资源密集,我建议您创建一个缓存机制,这样您就不应该为每个loadBitmap来电拨打bindView