У меня есть действие, которое отображает 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;
}