2 Stimmen

EditText-Daten innerhalb von beforeTextChanged() des TextWatcher löschen

Ich muss EditText in meiner App so überwachen, dass wenn in EditText Daten in 2 Zeilen stehen, und ich dann in der 3. Zeile schreiben möchte, die Daten der vorherigen 2 Zeilen gelöscht werden sollen.

Dafür benutze ich folgende Methode:

mTextWatcher = new TextWatcher() {

        private int zeilen;

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            Log.v("", "innerhalb von ontextchnaged");

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

            zeilen = getTotalLines(txtDataSource);
            if (zeilen == 2) {                   

                   txtDataSource.removeTextChangedListener(mTextWatcher);
                Log.v("", txtDataSource.getText().toString());
                txtDataSource.setText("");
                txtDataSource.addTextChangedListener(mTextWatcher);

            }
        }

        @Override
        public void afterTextChanged(Editable s) {
            Log.v("", "innerhalb von aftertextchanged");

        }
    };

    txtDataSource.addTextChangedListener(mTextWatcher);

und ich erhalte die Anzahl der Zeilen, die durch den folgenden Code eingegeben wurden:

private int getTotalLines(EditText editText) {
    int zeilennummer = 0;
    String text = editText.getText().toString()
            .substring(0, editText.getSelectionStart());

    for (int i = 0; i < text.length(); i++) {
        if (String.valueOf(text.charAt(i)).equalsIgnoreCase("\n")) {
            zeilennummer++;
        }
    }

    return zeilennummer;
}

Also, wenn ich 2 Zeilen Daten in EditText erhalte, entferne ich den Watcher aus EditText, lösche die Daten aus EditText und füge dann den Watcher wieder hinzu.

Alles funktioniert gut, aber das Problem ist, dass nach 2 Zeilen, wenn ich anfange zu schreiben, es nicht den ersten Buchstaben schreibt, den ich von der Tastatur eingebe, es beginnt mit der Eingabe des zweiten Zeichen.

Also, nach 2 Zeilen, wenn ich 2 Zeichen eingebe, schreibt es nicht das erste Zeichen, das ich eingegeben habe, sondern beginnt mit dem zweiten Zeichen.

Bitte hilf mir, das zu lösen.

Vielen Dank ....

2voto

Neha Shukla Punkte 3484

Endlich habe ich mein Problem gelöst.

Es mag nicht der Standardweg sein, aber ich habe keinen anderen Weg gefunden, dies innerhalb von beforeTextChanged() zu tun.

Ich habe das Problem gelöst, indem ich den folgenden Code innerhalb von onTextChanged() verwendet habe.

     @Override
     public void onTextChanged(CharSequence s, int start, int before,
                int count) {

 lines = getTotalLines(txtDataSource);

  if (lines == 2 ) {

     String frstChar = String.valueOf(s.toString().charAt(s.toString().length() - 1));
     txtDataSource.removeTextChangedListener(mTextWatcher);

 txtDataSource.setText("" + frstChar);

     txtDataSource.setSelection(txtDataSource.getText().toString().length());

 txtDataSource.addTextChangedListener(mTextWatcher);

}
   }

und jetzt wird in der 3. Zeile der erste Buchstabe im EditText angezeigt.

Ich teile meinen Weg, so dass, wenn jemand anderes auf ein solches Problem stoßen würde, sie es auf diese Weise lösen können.

Vielen Dank

-1voto

raul Punkte 1

Versuchen Sie das Problem zu lösen, wenn Sie in der Mitte des Wortes bearbeiten.

"setSelection" zwingt Sie immer, am Ende des Textes zu schreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X