This is not an issue, there is absolutely no guarantee on the order in which getView() will be called nor how many times. In your particular case you are doing the worst thing possible with a ListView by giving it a height=wrap_content. This forces ListView to measure a few children out of the adapter at layout time, to know how big it should be. This is what provides ListView with the convertViews you see passed to getView() even before you scroll.
On Tue, Apr 13, 2010 at 1:32 PM, edzah <[email protected]> wrote: > this is a cross-post from SO . haven't got much attention over there > so I am posting it here. orig here: > > http://stackoverflow.com/questions/2618272/custom-listview-adapter-getview-method-being-called-multiple-times-and-in-no-coh > > ---------------------------------------------------------------------------------- > > I have a custom list adapter: > > class ResultsListAdapter extends ArrayAdapter<RecordItem> { > > in the overridden 'getView' method I do a print to check what position > is and whether it is a convertView or not: > > �...@override > public View getView(int position, View convertView, ViewGroup > parent) { > System.out.println("getView " + position + " " + convertView); > > The output of this (when the list is first displayed, no user input as > yet) > > 04-11 16:24:05.860: INFO/System.out(681): getView 0 null > 04-11 16:24:29.020: INFO/System.out(681): getView 1 > android.widget.relativelay...@43d415d8 > 04-11 16:25:48.070: INFO/System.out(681): getView 2 > android.widget.relativelay...@43d415d8 > 04-11 16:25:49.110: INFO/System.out(681): getView 3 > android.widget.relativelay...@43d415d8 > 04-11 16:25:49.710: INFO/System.out(681): getView 0 > android.widget.relativelay...@43d415d8 > 04-11 16:25:50.251: INFO/System.out(681): getView 1 null > 04-11 16:26:01.300: INFO/System.out(681): getView 2 null > 04-11 16:26:02.020: INFO/System.out(681): getView 3 null > 04-11 16:28:28.091: INFO/System.out(681): getView 0 null > 04-11 16:37:46.180: INFO/System.out(681): getView 1 > android.widget.relativelay...@43cff8f0 > 04-11 16:37:47.091: INFO/System.out(681): getView 2 > android.widget.relativelay...@43cff8f0 > 04-11 16:37:47.730: INFO/System.out(681): getView 3 > android.widget.relativelay...@43cff8f0 > > AFAIK, though I couldn't find it stated explicitly, getView() is only > called for visible rows. Since my app starts with four visible rows at > least the position numbers cycling from 0-3 makes sense. But the rest > is a mess: > > * Why is getview called for each row three times? > * Where are these convertViews coming from when I haven't scrolled > yet? > > I did a bit of reseach, and without getting a good answer, I did > notice that people were associating this issue with layout issues. So > in case, here's the layout that contains the list: > > <?xml version="1.0" encoding="utf-8"?> > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ > android" > android:layout_height="fill_parent" > android:layout_width="fill_parent" > android:orientation="vertical" > > > <TextView android:id="@+id/pageDetails" > android:layout_width="fill_parent" > android:layout_height="wrap_content" /> > > <ListView android:id="@+id/list" > android:layout_width="fill_parent" > android:layout_height="wrap_content" > android:drawSelectorOnTop="false" /> > > </LinearLayout> > > and the layout of each individual row: > > <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/ > android" > android:layout_width="fill_parent" > android:layout_height="108dp" > android:padding="4dp"> > > <ImageView > android:id="@+id/thumb" > android:layout_width="120dp" > android:layout_height="fill_parent" > android:layout_alignParentTop="true" > android:layout_alignParentBottom="true" > android:layout_alignParentLeft="true" > android:layout_marginRight="8dp" > android:src="@drawable/loading" /> > > <TextView > android:id="@+id/price" > android:layout_width="wrap_content" > android:layout_height="18dp" > android:layout_toRightOf="@id/thumb" > android:layout_alignParentBottom="true" > android:singleLine="true" /> > > <TextView > android:id="@+id/date" > android:layout_width="wrap_content" > android:layout_height="18dp" > android:layout_alignParentBottom="true" > android:layout_alignParentRight="true" > android:paddingRight="4dp" > android:singleLine="true" /> > > <TextView > android:id="@+id/title" > android:layout_width="fill_parent" > android:layout_height="wrap_content" > android:textSize="17dp" > android:layout_toRightOf="@id/thumb" > android:layout_alignParentRight="true" > android:layout_alignParentTop="true" > android:paddingRight="4dp" > android:layout_alignWithParentIfMissing="true" > android:gravity="center" /> > > </RelativeLayout> > > Thank you for your time > > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > > To unsubscribe, reply using "remove me" as the subject. > -- Romain Guy Android framework engineer [email protected] Note: please don't send private questions to me, as I don't have time to provide private support. All such questions should be posted on public forums, where I and others can see and answer them -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

