NumberPicker
功能描述:ActivityA跳转至ActivityB,ActivityA中包含NumberPicker,从ActivityB中回到ActivityA中时,需要对NumberPicker重新赋值,结果报错,数组越界,具体错误报错内容如下:
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
原因:在初始化NumberPicker时代码执行顺序是这样的:
numberPicker.displayedValues = contentArray[num]?.toTypedArray()
numberPicker.maxValue = contentArray[num]!!.size-1
numberPicker.value = 0
numberPicker.minValue = 0
此时从ActivityB->ActivityA时,displayValues长度减小,会导致maxValue的值大于displayValues的长度,此时就会报错数组越界。
解决办法:
numberPicker.maxValue = contentArray[num]!!.size-1
numberPicker.displayedValues = contentArray[num]?.toTypedArray()
numberPicker.value = 0
numberPicker.minValue = 0
调换代码的执行顺序,先设置maxValue,就不会出现上述问题。
Spinner->设置下拉框中的内容居中
spinner 在使用过程中,主要是内容无法居中的问题,本来问题好解决,但是被编译器给小坑了一波,在这里记录一下。
这里我是用kotlin 写的
val arrayAdapter = ArrayAdapter<String>(
this,
// R.layout.spinner_textview_center,
R.layout.support_simple_spinner_dropdown_item,
spinnerDatas
)
一般我们使用的都是这个 R.layout.support_simple_spinner_dropdown_item,下拉样式,这其实是一个TextView。注释掉的那行是我采用的布局,居中比较简单,自己重新写一个布局,然后在引入就可以了。下边先放上我写的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:textColor="#000000"
android:textSize="18sp"
android:gravity="center"
android:id="@android:id/text1"
style="?attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="?attr/dropdownListPreferredItemHeight"
android:ellipsize="marquee" />
编译器的坑是,无论我怎么写xml布局,ArrayAdapter重载式中无法识别,布局ID,初次设置居中的我,以为不能改。。。最后重启大法好。重启android studio 最终可以了。