I am calling notifyDataSetChanged(). If I override it in my adapter, to add a log trace, this does get hit and the trace happens . . .
> > > > > > * // just overriding notifyDataSetChanged() to instrument it > @Override public void notifyDataSetChanged() { > Log.e ("notifyDataSetChanged()...", "listItems.size()=" + > String.valueOf(listItems.size()) + " lv.getCount()=" + > String.valueOf(lv.getCount()) ); //!! debugging > super.notifyDataSetChanged(); } * > The dataset - listItems - returns a size of 6. But *getView(*) gets called with position values up to 12 (there are 12 items visible on the screen because that's how many items there *used to be* in the dataset,) So why is getView being called with a position value greater that the (current) largest index in its dataset? Another way to think of this question is how does getView know the largest value of position it can have? (BTW I solved the ListView.getCount() problem by calling setListAdapter() on the ListActivity after updating the datasource. As a result ListView's *getCount()* now accurately reflect the the number of list items. That seems to have no affect on this bug. On Thursday, May 15, 2014 2:09:57 PM UTC-4, plnelson wrote: > > > I'm getting a crash in my adapter's *getView()* routine because it's > being called with a position value of 6 and my datasource only has 6 items > in it. So I assumed that the position parameter should be in a range of > [0]-[5]? What determines the range of values in *getView(*)'s position > parameter? > > Details: > > the XML ... > > <ListView >> android:id="@android:id/list" >> android:layout_height="match_parent" >> android:layout_width="match_parent" >> android:cacheColorHint="@color/colGrey" >> android:background="@color/colGrey" >> android:clickable="true" >> android:fastScrollEnabled="true" >> android:choiceMode="none"/> >> > > ...In MyListActivity, which is a ListActivity . . . > > public static ListView lv; // my ListView in the code >> > > ... during *onCreate()* . . . > > setContentView(R.layout.mylist); > lv = getListView(); > > > create the adapter and bind it . . . > > mylistadapter = new MyListAdapter(MyListActivity.this); >> setListAdapter(mylistadapter); // bind the adapter >> > > ...the data source is an ArrayList called listItems. during the course of > running the program its size varies and it may have been 15 earlier in > program execution . . . > > public static ArrayList<String>listItems=new ArrayList<String>(); >> > > ... in my adapter, which is a BaseAdapter, my ovveride of getCount() looks > like this . . . > > @Override >> public int getCount() { >> return listItems.size(); >> } >> > > ... when I call *getCount()* in *getView()* it returns 6, which is the > number of items in the data source, but if I call lv.*getView(*) it > returns 15. (any idea where this 15 is coming from?) Could that be why the > adapter is calling *getView()* with index too big? > > Thanks in advance! > > > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.