3

我读了这个问题,它说不用担心,但我想我需要一些保证。

我的自定义 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);

我正在关注加载大型位图的一系列 Android 教程,但已将decodSmapledBitmapFromUricalculateInSmapleSizeloadBitmapBitmapWorkerTaskAsyncDrawablecancelPotentialWorkgetBitmapWorkerTask移至实用程序文件夹。

...所以我打电话loadBitmap给一个列表视图,它链了 77 次,其中当前有 12 行(加载时屏幕上显示 6 行,仅提示第 7 次显示)。

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

谢谢你的话。

4

2 回答 2

10

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

于 2013-06-07T20:17:51.403 回答
2

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

于 2013-06-07T19:37:02.357 回答