Еще один getView вызывается несколько раз

Каждый предмет в моемListView содержатьImageView иTextView, это будет заполнено удаленной информацией.

Я получил URL дляImageViewПоэтому я начинаюAsyncTask который загружает изображение и позвонитsetImageBitmap с загруженным растровым изображением.

Это идет очень хорошо, но когда ListView создан,getView() призван часто. Это вызывает около 7 разgetView для первых 10 строк (видны только 7). (Итак: 0, 1 и т. Д., 10, 0, 1 и т. Д.).

Тогда я могу просто плавно перейти к 10-му пункту. Но после этого для каждой новой строки просмотр списка повторяется примерно в 7 разgetView за первые 10 предметов. (Это приведет к отставанию ..)

Но когда я удаляюsetImageBitmap отAsyncTaskэто все не произойдет!

В чем может быть проблема? Может быть, какой-то макет слишком большой, что вызовет еще одну серию getViews?

Вот некоторый код:

<ListView
    android:id="@+id/mylist"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/mydivider"
    android:divider="@+color/mycolor"
    android:dividerHeight="2dp"
    android:fadingEdge="none"
    android:fastScrollEnabled="true"
    android:listSelector="@android:color/transparent"
    android:scrollbars="horizontal"
    android:scrollingCache="false"
    android:smoothScrollbar="false" />

AsyncTask:

public static class MyTask extends AsyncTask<String, Integer, Bitmap> {
    private LruCache<String, Bitmap> mMap;
    private String mUri;
    private int mPosition;
    private ViewHolder mHolder;

    public MyTask (ViewHolder holder, int position, LruCache<String, Bitmap> map) {
        mMap = map;
        mHolder = holder;
        mPosition = position;
    }

    @Override
    protected Bitmap doInBackground(String... url) {
        mUri = url[0];
        return getBitmapFromURL(mUri);
    }

    @Override
    protected void onPostExecute(Bitmap b) {
        if (b != null) {
            mMap.put(mUri, b);
            if (mPosition == mHolder.position) {
                holder.image.setImageBitmap(b);
            }
        }
    };
}

GetView ()

row = convertView;
ViewHolder holder;
if (row == null) {
    row = vi.inflate(R.layout.mylayout, null);
    holder = new ViewHolder();
    holder.image = (ImageView) row.findViewById(R.id.myimage);
    holder.title = (TextView) row.findViewById(R.id.mytext);
    row.setTag(holder);
} else {
    holder = (ViewHolder) row.getTag();
}

holder.title.setText("text");
holder.image.setImageResource(R.drawable.mydefaulticon);
holder.position = position;
startMyTask(content, holder, position);

Еще немного информации:

Когда создается новое представление, показанная стековая трасса вызывает getView изListView.makeAndAddView() Но в бесполезной полосе getViews это исходит отListView.measureHeigthOfChildren()

Таким образом, кажется, что макет меняется, когда я устанавливаю растровое изображение ...

Ответы на вопрос(5)

Ваш ответ на вопрос