Domanda

Ho un EditText e un Wextwatcher.

Scheletro del mio codice:

EditText x;
x.addTextChangedListener(new XyzTextWatcher());

XyzTextWatcher implements TextWatcher() {
    public synchronized void afterTextChanged(Editable text) {
        formatText(text);
    }
}

Il mio metodo formatText () inserisce alcuni trattini in alcune posizioni del testo.

private void formatText(Editable text) {
    removeSeparators(text);

    if (text.length() >= 3) {
        text.insert(3, "-");
    }
    if (text.length() >= 7) {
        text.insert(7, "-");
    }
}

private void removeSeparators(Editable text) {
    int p = 0;
    while (p < text.length()) {
        if (text.charAt(p) == '-') {
            text.delete(p, p + 1);
        } else {
            p++;
        }
    }
}

Il problema che ho è: ciò che viene visualizzato sul mio editText non è sincronizzato con la modifica. Quando ho eseguito il debug del codice, ho visto che il testo variabile (modificabile) ha il valore atteso, ma ciò che viene mostrato su EditText non corrisponde sempre alla modifica.

Ad esempio, quando ho un testo x = "123-456-789" Ho tagliato il testo "456" da X manualmente. Dopo la formattazione, la mia modifica ha il valore "123-789-" Tuttavia, il valore mostrato sul mio editText è "123--789"

Tuttavia, hanno lo stesso valore nella maggior parte dei casi.

Ho pensato che EditText fosse modificabile e che dovrebbero sempre corrispondere. Mi sto perdendo qualcosa?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top