我在我的适配器的getView()例程中遇到了崩溃,因为它的位置值为6,而我的数据源只有6个项目。所以我假设位置参数应该在[0] - [5]的范围内?是什么决定了getView()位置参数的值范围?
详细信息:
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"/>
...在MyListActivity中,这是一个ListActivity。 。
public static ListView lv; // my ListView in the code
...在 onCreate()期间。 。
setContentView(R.layout.mylist);
lv = getListView();
创建适配器并绑定它。 。
mylistadapter = new MyListAdapter(MyListActivity.this);
setListAdapter(mylistadapter); // bind the adapter
...数据源是一个名为listItems的ArrayList。在运行程序的过程中,它的大小各不相同,可能在程序执行的早期阶段已有15个。 。
public static ArrayList<String>listItems=new ArrayList<String>();
...在我的适配器中,这是一个BaseAdapter,我的getCount()的ovveride看起来像这样。 。
@Override
public int getCount() {
return listItems.size();
}
...当我在getView()中调用getCount()时,它返回6,这是数据源中的项目数,但如果我调用lv.getCount(),则返回15.(任何想法,这15是来自?)这可能是适配器调用getView索引太大的原因吗?
答案 0 :(得分:5)
所以我假设位置参数应该在[0] - [5]范围内?
是
什么决定了getView()位置参数的值范围?
范围从0到getCount()
- 1,其中getCount()
已实施Adapter
。
在运行程序的过程中,它的大小各不相同,在程序执行的早期可能已经超过15个
如果您更改数据,则需要在notifyDataSetChanged()
上致电Adapter
,包括更改行数。