69 Stimmen

Wie man durch die Elemente einer Ansicht iteriert

Ich habe eine Ansicht mit Radios, Eingängen und einer Schaltfläche, und wenn ich darauf klicke, möchte ich überprüfen, ob alle Eingänge Informationen enthalten. Wie kann ich die Elemente der Ansicht in der Aktivität durchlaufen und prüfen, ob jede Textansicht die oben genannte Anforderung erfüllt? Vielen Dank!

136voto

Kevin Coppock Punkte 131486

Ich habe etwas ähnliches in einigen Code, den ich nicht mit mir im Moment haben, aber aus dem Gedächtnis sollte es so etwas wie dieses sein (vorausgesetzt, eine übergeordnete Ansicht LinearLayout mit einer ID von "Layout"):

LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
boolean success = formIsValid(layout);

public boolean formIsValid(LinearLayout layout) {
    for (int i = 0; i < layout.getChildCount(); i++) {
        View v = layout.getChildAt(i);
        if (v instanceof EditText) {
            //validate your EditText here
        } else if (v instanceof RadioButton) {
            //validate RadioButton
        } //etc. If it fails anywhere, just return false.
    }
    return true;
}

25voto

Kalimah Punkte 10651

Um die Methode von kcoppock rekursiv anzuwenden, können Sie sie wie folgt ändern:

private void loopViews(ViewGroup view) {
    for (int i = 0; i < view.getChildCount(); i++) {
        View v = view.getChildAt(i);

        if (v instanceof EditText) {
            // Do something

        } else if (v instanceof ViewGroup) {

            this.loopViews((ViewGroup) v);
        }
    }
}

10voto

M. Palsich Punkte 1608

Wenn Sie in Kotlin schreiben, können Sie mit Android Jetpacks Kotlin-Erweiterungen (KTX) bieten Erweiterungsfunktionen für die Iteration über die Kinder einer ViewGroup.

myViewGroup.forEach { ... }

myViewGroup.forEachIndexed { index, view -> ... }

Fügen Sie einfach die Abhängigkeit zu Ihrer Anwendung hinzu. Überprüfen Sie den obigen Link, um die aktuellste Version zu erhalten.

implementation "androidx.core:core-ktx:1.2.0"

Diese Erweiterungen enthalten haufenweise nützliche Funktionen, die sonst als "Boilerplate" abgetan werden. Es lohnt sich, sie jetzt auszuprobieren, um in Zukunft Zeit zu sparen!

0voto

gssi Punkte 5003

Ihr onClickListener liefert die View v Objekt; Verwendung View rV = v.getRootView() um sich auf dem Formular zu positionieren. Verwenden Sie dann rV.findViewWithTag( ... ) o rV.findViewByID(R.id. ... ) um Ihre Formularelemente zu finden.

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