Lösung zum Erstellen dynamischer Formulare mit AndroidAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Lösung zum Erstellen dynamischer Formulare mit Android

Post by Anonymous »

Ich entwickle derzeit eine Android-Anwendung, in der ich dynamische Formulare basierend auf Metadaten anzeigen soll, die in JSON-Dokumenten enthalten sind. Grundsätzlich funktioniert es (ohne die Details), dass ein JSON-Dokument die Struktur eines Formulars darstellt:

Code: Select all

{
"fields": [
{
"name": "fieldA",
"type": "STRING",
"minCharacters": 10,
"maxCharacters": 100
},
{
"name": "fieldB",
"type": "INTEGER",
"min": 10,
"max": 100
},
{
"name": "fieldC",
"type": "BOOLEAN_CHECKBOX",
"defaultValue": true
}
...
],
"name": "Form A"
}
Was ich tatsächlich mache, wenn die Anwendung eines dieser JSON-Dokumente empfängt, ist, dass sie jedes Feld durchläuft und es in die entsprechende Ansicht (EditText, Checkbox, benutzerdefinierte Ansicht usw.) analysiert, der Ansicht ein Tag hinzufügt (um es einfach abrufen zu können) und die Ansicht einem LinearLayout hinzufügt. Hier ist ein Pseudocode, wie es tatsächlich funktioniert:

Code: Select all

//Add form title
linearLayout.addView(new TextView(form.name));
//Add form fields
for(Field field: form.fields) {
View view;
switch(field.type){
case STRING: view = new EditText();
...
}
view.setTag(field.id);
linearLayout.addView(view);
}
Das Problem dabei ist, dass bei großen Formularen (wie mehr als 20 Feldern) viele Ansichten vergrößert werden müssen und der UI-Thread stark leidet. Ein weiterer zu berücksichtigender Punkt ist, dass ein einzelner Bildschirm mehrere Formulare haben kann (eines nach dem anderen vertikal sortiert).

Um eine Überlastung des UI-Threads zu vermeiden, habe ich mir zwei mögliche Lösungen überlegt:
  • Verwenden einer RecyclerView.
  • Verwenden von Litho von Facebook.
Bei der Betrachtung dieser beiden Lösungen kommen mir jedoch mehrere Fragen in den Sinn:
  • Ist die Verwendung von Litho ein guter Anwendungsfall? Oder reicht die Verwendung einer RecyclerView aus?
  • Was ist mit dem Status meiner Ansichten? Wenn ich ein Recycling-Muster verwende, kann ich dann den Status jedes meiner Felder (auch außerhalb des Bildschirms) beibehalten und so das Formular ohne Datenverlust speichern?
  • Wenn ich ein Recycling-Muster verwende, um ein Formular anzuzeigen, wie gehe ich dann mit mehreren Formularen um? Können wir RecyclerView verschachtelt haben? Formulare müssen nacheinander wie in einem vertikalen RV angezeigt werden, aber wenn Formulare selbst RV sind, wie soll ich damit umgehen?
Dies ist eher eine „gute Praxis“-Frage und gibt den richtigen Weg oder einen der richtigen Wege zum Erreichen meines Ziels an, als dass eine spezifische Antwort mit Codebeispiel usw. erforderlich ist.

Vielen Dank im Voraus für Ihre Zeit.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post