Решение для создания динамических форм с помощью AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Решение для создания динамических форм с помощью Android

Сообщение Anonymous »

На самом деле я разрабатываю приложение для Android, в котором мне нужно отображать динамические формы на основе метаданных, содержащихся в документах JSON. По сути, это работает (без подробностей): документ JSON представляет структуру формы:

Код: Выделить всё

{
"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"
}
На самом деле, когда приложение получает один из этих документов JSON, я просматриваю каждое поле и анализирую его до соответствующего представления (EditText, Checkbox, пользовательское представление и т. д.), добавляя тег к представлению (чтобы его можно было легко получить) и добавляю представление в LinearLayout. Вот псевдокод того, как это работает на самом деле:

Код: Выделить всё

//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);
}
Проблема в том, что в больших формах (например, >20 полей) требуется раздувать большое количество представлений, и поток пользовательского интерфейса сильно страдает. Еще один момент, который следует учитывать, это то, что на одном экране может быть несколько форм (одна за другой, отсортированных по вертикали).

Чтобы избежать перегрузки потока пользовательского интерфейса, я подумал о двух возможных решениях:
  • Использование RecyclerView.
  • Использование Litho от Facebook.
Но при рассмотрении этих двух решений у меня возникает несколько вопросов:
  • Хорош ли вариант использования Litho? Или достаточно использовать RecyclerView?
  • А как насчет состояния моих представлений? Если я использую шаблон повторного использования, смогу ли я сохранить состояние каждого из моих полей (даже тех, которые находятся за пределами экрана) и, таким образом, смогу сохранить форму без потери данных?
  • Если я использую шаблон повторного использования для отображения одной формы, как я буду обрабатывать несколько форм? Можем ли мы использовать вложенный RecyclerView? Формы должны отображаться одна за другой, как внутри вертикального RV, но если сами формы являются RV, как мне с этим справиться?
Это скорее вопрос «хорошей практики», дающий правильный путь или один из правильных способов достижения моей цели, чем необходимость конкретного ответа с примером кода и т. д.

Заранее благодарю за ваше время.

Подробнее здесь: https://stackoverflow.com/questions/450 ... th-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»