Вращение за пределами индекса Android NumberPicker

Я пытаюсь создать пользовательское средство выбора времени. Но проблема, с которой столкнулся, заключается в том, что при повороте экрана. также, если я нажимаю кнопку «Домой», чтобы выйти из приложения, оно вылетает, когда я возвращаюсь с той же ошибкой.

public class MyTimePicker extends RelativeLayout {

private NumberPicker hour;
private NumberPicker minute;
private NumberPicker am;
private int interval = 5;

public MyTimePicker(Context context) {
    super(context);
    init();}

public MyTimePicker(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();}

public MyTimePicker(Context context, AttributeSet attrs, int  defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();}  

    private void init() {
    LayoutInflater inflater = LayoutInflater.from(getContext());
    if (inflater != null) {

        String[] ams = new String[2];
        ams[0]="AM";
        ams[1]="PM";

        root = inflater.inflate(R.layout.my_time_picker, this, true);
        hour = (NumberPicker) root.findViewById(R.id.hour);
        minute = (NumberPicker) root.findViewById(R.id.minute);
        am = (NumberPicker) root.findViewById(R.id.am);  am.setDisplayedValues(ams);
        am.setWrapSelectorWheel(true);
        am.setMinValue(0);
        am.setMaxValue(1);

       String[] hours = new String[24];

       for (int i = 0; i < 24; i++) {
        hours[i]= "" + (i < 12 ? i + 1 : i - 11);
      }

    String[] mins = new String[60 / interval];
    NumberFormat formatter = new DecimalFormat("00");

    for (int i = 0; i < mins.length; i++) {
        mins[i] = formatter.format(i * interval);
    }

    hour.setDisplayedValues(hours);//This is what causes the error
    hour.setWrapSelectorWheel(true);

    hour.setMinValue(0);
    hour.setMaxValue(hours.length - 1);

    minute.setDisplayedValues(mins);//This is what causes the error

    minute.setWrapSelectorWheel(true);

    minute.setMinValue(0);
    minute.setMaxValue(mins.length - 1); 
     }
   }
}

Это ошибка, которую я получаю

06-24 15:15:50.509    2006-2006/com.E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.mye.appo, PID: 2006
java.lang.IndexOutOfBoundsException: setSpan (2 ... 2) ends beyond length 0
        at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1018)
        at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:611)
        at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:607)
        at android.text.Selection.setSelection(Selection.java:76)
        at android.widget.EditText.setSelection(EditText.java:92)
        at android.widget.NumberPicker$SetSelectionCommand.run(NumberPicker.java:2189)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Я обнаружил, что могу предотвратить этот сбой, если устанавливаю отображаемые значения из фрагмента или действия только тогда, когда if(this.isVisible())

из того, что я нашел, это похоже на проблему жизненного цикла


person konstantine    schedule 24.06.2015    source источник


Ответы (1)


из-за ошибки - попробуйте установить перед использованием объекта NumberPicker:

NumberPicker.setSaveFromParentEnabled(false);       
NumberPicker.setSaveEnabled(false);

я открыл вопрос об этой и другой ошибке выбора номера:

сообщил об ошибке средства выбора на сайте code.google

person ceph3us    schedule 29.07.2015
comment
Я вижу этот сбой, о котором сообщают пользователи (очень редко), но я не использую NumberPicker. Почему? - person android developer; 15.06.2019
comment
@androiddeveloper, может быть, вы используете компонент, который использует NumberPicker? - person ceph3us; 22.06.2019
comment
Я не вижу NumberPicker в отчете о сбое. Я вижу это: i.imgur.com/qUqykoP.png (ссылка: console.firebase.google.com/u/0/project/app-manager-cdf2c/ ). В журнале нет даже упоминания об одном из классов моего приложения, поэтому я даже не могу предположить, какая активность или фрагмент потерпели крах. - person android developer; 22.06.2019
comment
@androiddeveloper я не могу получить доступ к данным вашей консоли firebase - person ceph3us; 23.06.2019
comment
Логично, но вы смотрели на скриншот? Здесь я сделал увеличенный скриншот: ibb.co/9Vc3JKr - person android developer; 23.06.2019
comment
@androiddeveloper это метод android.widget.Editor setSelction IOBEX (при касании) выбирать нечего - проверяйте нужные настройки для этого виджета или ищите его баги - person ceph3us; 23.06.2019
comment
@androiddeveloper всегда - первым начинает узнавать больше о ndroid.widget.Editor (использование, свойства, примеры, ошибки) - person ceph3us; 24.06.2019
comment
Я не понимаю, что вы имеете в виду. - person android developer; 24.06.2019