是什么决定了getView()的位置参数中的值范围?

时间:2014-05-15 18:03:56

标签: android

我在我的适配器的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索引太大的原因吗?

1 个答案:

答案 0 :(得分:5)

  

所以我假设位置参数应该在[0] - [5]范围内?

  

什么决定了getView()位置参数的值范围?

范围从0到getCount() - 1,其中getCount()已实施Adapter

  

在运行程序的过程中,它的大小各不相同,在程序执行的早期可能已经超过15个

如果您更改数据,则需要在notifyDataSetChanged()上致电Adapter,包括更改行数。