ListView of WebViews - повторное использование элементов разной высоты не выполняется; запрашивает все представления перед отображением любого

У меня есть действие, которое отображает ListView . Каждый элемент в ListView представляет собой LinearLayout , состоящий из одного WebView . В списке потенциально сотни элементов, и каждый имеет разную высоту.

Первая проблема заключается в том, что при повторном использовании переработанного представления в getView () новое представление всегда имеет высоту исходного представления, хотя я установил layout_height для как LinearLayout , так и WebView в wrap_content .

Вторая проблема заключается в том, что getView () , похоже, вызывается для каждого элемент в списке, даже если на экране помещаются только первые пять или шесть. Я не видел этого при использовании других типов элементов списка. Например, в другом месте у меня есть список настраиваемых представлений, которые имеют одинаковую высоту, и я вижу, что getView () вызывается только для того количества представлений, которое изначально помещается на экране.

Итак. .. Мне нужно выяснить, как заставить переработанные WebView отображать их новое содержимое, чтобы можно было рассчитать их высоту, а не просто использовать предыдущую высоту. И я хотел бы знать, почему в данном случае система запрашивает у меня ВСЕ мои элементы.

Вот необходимые фрагменты кода:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView 
        android:id="@+id/topPane"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:dividerHeight="1.0px"
        android:divider="#FFFFFF"
        android:smoothScrollbar="false"
        />
</LinearLayout>

Строки строятся из:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
    <WebView 
        android:id="@+id/rowWebView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="0.0px"
        android:scrollbars="none"
        />
</LinearLayout>

Это getView () в моем адаптере. На данный момент фрагменты HTML берутся из массива строк.

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
        {
        String item = (String) getItem(position);
        if (convertView == null)
            {
            convertView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.rowview, parent, false);
            }
        WebView wv = (WebView) convertView.findViewById(R.id.rowWebView);
        wv.loadDataWithBaseURL(null, item, "text/html", "utf-8", "about:blank");
        return convertView;
        }
8
задан Regexident 24 March 2014 в 14:32
поделиться