Ich habe eine Aktivität, die eine ListView
. Jedes Element in der ListView
es un LinearLayout
bestehend aus einer WebView
. Die Liste kann Hunderte von Einträgen enthalten, die alle eine unterschiedliche Höhe haben.
Das erste Problem ist, dass bei der Wiederverwendung einer wiederverwendeten Ansicht in getView()
ist die neue Ansicht immer so hoch wie die ursprüngliche Ansicht, auch wenn ich die Einstellung layout_height
sowohl für die LinearLayout
und die WebView
まで wrap_content
.
Das zweite Problem ist, dass getView()
scheint für jedes Element in der Liste aufgerufen zu werden, obwohl nur die ersten fünf oder sechs auf den Bildschirm passen. Bei anderen Listenelementtypen habe ich dieses Problem nicht gesehen. An anderer Stelle habe ich beispielsweise eine Liste mit benutzerdefinierten Ansichten, die alle die gleiche Höhe haben, und ich sehe nur getView()
für die Anzahl der Ansichten, die ursprünglich auf den Bildschirm passten, aufgerufen wird.
Ich muss also herausfinden, wie ich die Wiederverwertung von Daten erzwingen kann. WebViews
um ihre neuen Inhalte zu rendern, so dass ihre Höhe berechnet werden kann, anstatt einfach die vorherige Höhe zu verwenden. Und ich würde gerne wissen, warum das System mich in diesem Fall nach ALLEN meinen Artikeln fragt.
Hier sind die erforderlichen Codeschnipsel:
<?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>
Reihen werden aus gebildet:
<?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>
Dies ist getView() in meinem Adapter. HTML-Schnipsel kommen aus einem Array von Strings für jetzt.
@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;
}