Удалить начальный ноль в текстовом редакторе с пользовательской кнопки нуля в Android
Я использовал addTextChangedListener(new TextWatcher()
удалить ведущие нули, однако это работает только в Android программной клавиатуре numpad
вместо моего обычая numpad
, n0
это нулевая кнопка. в основном, когда я нажимаю нулевую кнопку, мое приложение вылетает.
// пользовательская нулевая кнопка n0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { input1.append("0"); operationA(); } });
Мне просто нужен код, чтобы нулевая кнопка не возвращала никакого значения при нажатии, чтобы избежать начальных нулей. Ниже addTextChangedListener(new TextWatcher()
input1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @ Переопределить public void afterTextChanged(Editable s) { if (s.toString(). Length() == 1 && s.toString(). StartWith("0")) { s.clear(); } } });
Получение этих ошибок:
AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: главная Процесс: контекст, PID: 12408 java.lang.NumberFormatException: пустая строка в java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071) в java.lang.Double.valueOf(Double.java:511) at context.operationA(MainActivity.java:478) в контексте $17.onClick(MainActivity.java:383) на android.view.View.performClick(View.java:5610) на android.view.View$PerformClick.run(View.java:22265) на android.os.Handler.handleCallback(Handler.java:751) на android.os.Handler.dispatchMessage(Handler.java:95) на android.os.Looper.loop(Looper.java:154) на android.app.ActivityThread.main(ActivityThread.java:6077) в java.lang.reflect.Method.invoke(родной метод) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
1 ответ
Ошибка произошла при попытке разобрать строку как double
в operationA
метод, но строка пустая, проверьте, не является ли строка пустой, прежде чем конвертировать ее
У меня такая же проблема. Я решил это, написав функцию ниже:
private String trimLeadingZeros(String string)
{
boolean startsWithZero = true;
while (startsWithZero)
{
if(string.startsWith("0") && string.length()>=2 && !string.substring(1,2).equalsIgnoreCase("."))
{string = string.substring(1);}
else
{startsWithZero = false;}
}
return string;
}
Эта функция также предотвращает обрезку всех нулей из строки типа 00000.123 (она вернет 0,123 вместо бесполезных.123).
Чтобы удалить ведущий ноль в EditText, вы можете TextWatcher
который обнаруживает первый введенный ноль и очищает его
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().equals("0")) {
editText.removeTextChangedListener(this);
editText.setText("");
editText.addTextChangedListener(this);
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
editText.addTextChangedListener(watcher);