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!
Antworten
Zu viele Anzeigen?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;
}
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);
}
}
}
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!