当我第一次从微调器中选择时,当第二次选择时,每件事情都很好 但之后从中选择时,它会显示错误
E / AndroidRuntime(10594):java.lang.ArrayIndexOutOfBoundsException:length = 20;指数= 20
public static ArrayList<String> s=new ArrayList<String>();
for(........
s.add(e.child(2).text());
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
try{
editPrice.setText(""+Splash.s.get(pos));
}catch (Exception e) {
Toast.makeText(parent.getContext(),"The country is "+pos, Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:2)
Java索引从0开始。因此,如果数组具有 20 元素,则其索引从 0 到 19 。
以String String数字为例:
Values: A, B, C, D, E - length: 5
Indexes: 0, 1, 2, 3, 4
String valueInFIRSTposition= stringArray.get(0); //stringArray[0] for arrays
String valueInSECONDposition= stringArray.get(1); //stringArray[1] for arrays
...
String valueInLASTposition= stringArray.get(stringArray.size()-1); //stringArray[stringArray.length-1] for array
因此,如果你想获取例如“C”,你将获取带有数字2的索引:
String valueInThirdPosition= stringArray.get(2); //stringArray[2] for arrays
此外,在编写迭代数组的 for循环时,它看起来像这样:
for (int i=0; i<array.size(); i++) {
Object value= array.get(i);
}
第一个索引 0 ,以获取数组的第一个元素。在for循环的中间部分(i<array.size(0)
),这是表示 WHEN 的条件,for循环结束,你会看到它结束 BEFORE 最后一个索引 - 由于上述原因。
答案 1 :(得分:0)
错误在于您正在尝试访问仅包含20个元素的数组的第21个元素(索引20)。
您必须更正您的代码,以便不会发生这种情况。
答案 2 :(得分:0)
查看http://developer.android.com/guide/topics/ui/controls/spinner.html#SelectListener
您应该使用parent.getItemAtPosition(pos)
来检索您的数据。
答案 3 :(得分:0)
Here is sample example for spinner
final Spinner spinner = (Spinner) findViewById(R.id.spinner_experience);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.experience_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
Object test = spinner.getSelectedItem();
Toast.makeText(AlbumsActivity.this, "The planet is " +
spinner.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});