我正在尝试在Spinner项目中显示当前年份加上五年的列表。但是收到错误java.lang.IndexOutOfBoundsException: Invalid index 2014, size is 0
我使用了这段代码,
ArrayList<String> years=new ArrayList<String>();
Calendar cal=Calendar.getInstance();
int curYear= cal.get(Calendar.YEAR);
for(int i=0;i<6;i++)
{
years.add(curYear+i, null);
}
Spinner spnYear= (Spinner) findViewById(R.id.spnYear);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, years);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnYear.setAdapter(adapter);
请帮忙。
感谢。
答案 0 :(得分:2)
当您使用add()
两个参数时,第一个是您想要添加它的索引。您只想致电years.add(String.valueOf(currYear + 1))
。我还在您添加的项目周围添加了String.valueOf()
,因为您有一个ArrayList<String>
答案 1 :(得分:0)
这是你的问题
for(int i=0;i<6;i++) {
years.add(curYear+i, null);
}
您正在使用add方法,该方法将第一个参数作为索引,第二个参数作为对象。文档声明它抛出
IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size()).
在第一次迭代时,size()
返回0,并且您尝试将元素放在2014
在
中更改它 for(int i=0;i<6;i++) {
years.add(String.valueOf(curYear+i));
}
答案 2 :(得分:0)
这是你向ArrayList
添加内容的方式。首先,您尝试将{curYear + i}添加到ArrayList<String>
。那不行。其次,你是以一种你实际上没有将对象传递给列表的方式添加它们的。您使用add(int index,E object)的add版本将 index 作为其第一个参数 - 而不是您要添加到列表中的内容。您的第二个参数,即您实际想要添加的参数,为null。这就解释了为什么你的列表大小为0.你应该正常添加你的值,并知道索引0,1,2,3,4将是未来5年。