当我在我的列表视图中输入超过20"件"时,它显示了这个错误,我该怎么做才能避免这种情况?
> java.lang.ArrayIndexOutOfBoundsException: length=20; index=20
> at com.Amarildo.asd.List_View_Esercizi.getView(List_View_Esercizi.java:33)
错误在此行
img.setImageResource(imageId[position]);
只有当我在列表视图中发布超过20个组件时才会出现
这是我的适配器
public class List_View_Esercizi extends ArrayAdapter<String> {
private Activity context;
private String[] nome;
private Integer[] imageId;
public List_View_Esercizi(Activity context, String[] nome, Integer[] imageId) {
super(context, R.layout.list_view_esercizi, nome);
this.context = context;
this.nome = nome;
this.imageId = imageId;
}
public View getView(int position, View view, ViewGroup parent){
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_view_esercizi, null, true);
TextView txt = (TextView) rowView.findViewById(R.id.textView);
ImageView img = (ImageView) rowView.findViewById(R.id.imageView2);
txt.setText(nome[position]);
img.setImageResource(imageId[position]);
return rowView;
}
答案 0 :(得分:2)
您为适配器提供的nome
数据集大于imageId
。由于getCount()
基于nome,因此getView将被称为nome.lenght - 1
次。当排名超过imageId.length - 1
的值时,您将获得ArrayIndexOutBoundException
答案 1 :(得分:0)
索引从0变为长度-1。因此,在尝试访问元素[length]时会出现异常。
答案 2 :(得分:0)
如果您不确定数组的大小,只需添加一个简单的检查,这样就可以跳过设置文本和/或图像。
if (nome.lenght > position) {
txt.setText(nome[position]);
}
if (imageId.lenght > position) {
img.setImageResource(imageId[position]);
}
答案 3 :(得分:0)
这是因为您的某个阵列的大小比另一个大,
所以我有一个建议,如果你有两个相同的大小,你应该尝试创建一个POJO类,让你的ArrayAdapter使用你的POJO [],这将降低复杂性和增强可读性,你的代码将很容易也调试。
恩乔伊!