Удалить начальный ноль в текстовом редакторе с пользовательской кнопки нуля в 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);
Другие вопросы по тегам