Heim  >  Artikel  >  Java  >  Wie können Endlosschleifen verhindert werden, wenn TextChangeListeners mit mehreren EditText-Feldern verwendet werden?

Wie können Endlosschleifen verhindert werden, wenn TextChangeListeners mit mehreren EditText-Feldern verwendet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-19 00:14:02129Durchsuche

How to Prevent Infinite Loops When Using TextChangeListeners with Multiple EditText Fields?

Android Text Change Listener mit mehreren EditText-Feldern

In der Android-Entwicklung ermöglicht der TextChangeListener Entwicklern, Änderungen im Textinhalt von EditText-Feldern zu überwachen . Wenn jedoch mehrere EditText-Felder verwendet werden, erfordert das Löschen des Inhalts eines Felds bei Änderung eines anderen eine sorgfältige Implementierung, um Endlosschleifen zu vermeiden.

Problem:
Der bereitgestellte Code versucht, Feld2 zu löschen wenn sich Feld1 ändert und umgekehrt. Dies führt jedoch zu einer Endlosschleife, da jedes Feld ein Änderungsereignis im anderen auslöst, was zu einer endlosen Löschung führt.

Lösung:
Um die Endlosschleife zu verhindern, eine Prüfung sollte hinzugefügt werden, um sicherzustellen, dass nur nicht leere Felder gelöscht werden. Durch Hinzufügen von field1.addTextChangedListener und field2.addTextChangedListener können Sie Änderungen in beiden Feldern überwachen. Fügen Sie in jedem Listener eine Bedingung hinzu, die prüft, ob die CharSequence-Länge größer als 0 ist. Wenn ja, löschen Sie den Inhalt des anderen Felds.

Überarbeiteter Code:

field1.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {}

    @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.length() != 0)
            field2.setText("");
    }
});

field2.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {}

    @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.length() != 0)
            field1.setText("");
    }
});

Indem Sie sicherstellen, dass nur nicht leere Felder gelöscht werden, verhindern Sie die Endlosschleife und ermöglichen Benutzern, Daten jeweils nur in ein Feld einzugeben.

Zusätzliche Hinweise:
Denken Sie daran, die Namenskonventionen einzuhalten und der Klarheit halber die richtige Einrückung zu verwenden. Weitere Einzelheiten finden Sie auch in der offiziellen Dokumentation zu TextWatcher.

Das obige ist der detaillierte Inhalt vonWie können Endlosschleifen verhindert werden, wenn TextChangeListeners mit mehreren EditText-Feldern verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn