2017-08-10 78 views
0

當我鍵入第一個數字時,我的numberPicker上的鍵盤類型更改爲「TYPE_CLASS_NUMBER」時,我的Android應用程序保持chrashing。沒有指定鍵盤類型的同樣作品。所以看起來鍵盤改變是問題。 下面的代碼:崩潰NumberPicker,更改鍵盤類型

public void chooseAmps(View view) { 
    final NumberPicker numberPicker = new NumberPicker(this); 
    NumberPicker.Formatter formatter = new PickerFormatter(); 
    //numberPicker.setFormatter(formatter); 
    numberPicker.setMinValue(0); 
    numberPicker.setMaxValue(100); 
    numberPicker.setDisplayedValues(getStringArray(0, 10)); 
    enableNumberPickerManualEditing(numberPicker); 


    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage(R.string.AmpsMessage) 
      .setTitle(R.string.AmpsTitle) 
      .setPositiveButton(R.string.accept, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.d("UI", String.valueOf(numberPicker.getValue())); 
        double currentDesired = numberPicker.getValue()/10.0; 
        charger.setCurrentDesired(currentDesired); 
        Log.d("UI", String.valueOf(charger.getCurrentDesired())); 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       } 
      }) 
      .setView(numberPicker); 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

String[] getStringArray(double begin, double end) { 
    String[] stringArray = new String[(int) ((end - begin) * 10)+1]; 
    double number = begin; 
    for (int i = 0; i < (int) ((end - begin) * 10+1); i++) { 
     stringArray[i] = String.format("%.1f", number); 
     number += 0.1; 
    } 
    Log.d("UI", String.valueOf(number)); 
    return stringArray; 
} 

public static void enableNumberPickerManualEditing(NumberPicker numPicker) { 
    int childCount = numPicker.getChildCount(); 

    for (int i = 0; i < childCount; i++) { 
     View childView = numPicker.getChildAt(i); 

     if (childView instanceof EditText) { 
      EditText editText = (EditText) childView; 
      editText.setInputType(InputType.TYPE_CLASS_NUMBER); 
      return; 
     } 
    } 
} 

}

碰撞的訊息:

「過程:com.jacobi.mario.charger,PID:28169 java.lang.IndexOutOfBoundsException:setSpan (3 ... 3)結束超出 長度2 在 android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1320) 在 android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:683) 在 android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:676) 在android.text.Selection.setSelection(Selection.java:78) 在android.widget.EditText.setSelection(EditText.java:96) at android.widget.NumberPicker $ SetSelectionCommand.run(NumberPicker.java:2278) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:6236) 在java.lang.reflect.Method.invoke(本機方法) 在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit。 Java的:891) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)」

任何人都得到了我一個提示?

回答

0

哇我剛找到一個解決方案,但也許有更好的?

對我來說它有改變: editText.setInputType(InputType.TYPE_CLASS_NUMBER); 至 editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);