What determines the range of values in getView()'s position parameter?

StackOverflow https://stackoverflow.com/questions/23685578

  •  23-07-2023
  •  | 
  •  

سؤال

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.getCount() it returns 15. (any idea where this 15 is coming from?) Could that be why the adapter is calling getView with index too big?

هل كانت مفيدة؟

المحلول

So I assumed that the position parameter should be in a range of [0]-[5]?

Yes.

What determines the range of values in getView()'s position parameter?

It will range from 0 to getCount()-1, where getCount() is implemented on the Adapter.

during the course of running the program its size varies and it may have been 15 earlier in program execution

You need to call notifyDataSetChanged() on the Adapter if you change the data, including changing the number of rows.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top