Динамически загружать каскадные вопросы в представлении Android

В настоящее время мы работаем над проектом, в котором веб-пользователь создает опрос с каскадными вопросами (каскадирование означает, что вопросы имеют мало ответов и зависят от этих ответов, а остальные вопросы меняются), а затем мобильные пользователи должны получить этот опрос в своем приложении для Android. Образец JSON Структура, которую мы думали, выглядит следующим образом:

{
  "status": "1",
  "tabs": [
    "Farmer Information",
    "Signature",
    "Crop Details",
    "Land Parcel"
  ],
  "survey":[
    {
      "type": "TextView",
      "cascade": "0",
      "value": "What is your name?",
      "survey": ""
    },
    {
      "type": "TextView",
      "cascade": "0",
      "value": "What is your age?",
      "survey" : ""
    },
    {
      "type": "RadioButtonGroup",
      "cascade": "1",
      "value": "Do you have kids?",
      "survey" : [
        {
          "type": "TextView",
          "cascade": "1",
          "value": "YES",
          "survey": [
            {
              "type": "TextView",
              "cascade": "1",
              "value": "How many of them below 18?",
              "survey": ""
            },
            {
              "type": "TextView",
              "cascade": "0",
              "value": "How many of them are girls?",
              "survey" : ""
            },
            {
              "type": "TextView",
              "cascade": "1",
              "value": "Where do you live in?",
              "survey": ""
            },
            {
              "type": "TextView",
              "cascade": "0",
              "value": "How long you were there?",
              "survey" : ""
            }
          ]
        },
        {
          "type": "TextView",
          "cascade": "0",
          "value": "NO",
          "survey" : [
            {
              "type": "TextView",
              "cascade": "1",
              "value": "Where do you live in?",
              "survey": ""
            },
            {
              "type": "TextView",
              "cascade": "0",
              "value": "How long you were there?",
              "survey" : ""
            }
          ]
        }
      ]
    }
  ]
}

Есть ли способ достичь такой вещи? Какие библиотеки наиболее подходят для этого сценария? Мы пробовали json2view, протей. Из всех этих мы можем передать json и загрузить представление, но если есть каскадные вопросы, ни один из них не может быть использован.

Более того, уточняем вопрос на примере: предположим, что пользователю задают вопрос Do you have any have kids?, На этот вопрос возможно два ответа. Yes & No в зависимости от ответа, который пользователь задает другим, вопросы должны загружаться динамически.

1 ответ

Решение

Это может быть слишком поздно, но здесь идет. Это можно сделать в proteus,

Философия: Как бы вы сделали это в Native Android?

Создавая собственное представление, давайте назовем его SurveyView который имеет 3 пользовательских атрибута

  1. status: начальное состояние
  2. cascade: условие проверки
  3. survey: массив детей SurveyView

Итак, в Native Android был бы метод setStatus() который будет вызываться при выборе ответа. Это установит status просмотров опроса детей. Ребенок будет проверять новый status против условия, установленного на них. Если это соответствует, это visible еще gone,

После этого просто зарегистрируйте это как пользовательский вид в Proteus. Есть немного более сложный способ сделать это без пользовательского представления (например, с помощью привязок функций).

{
  "visibility: "@{fn:eq(@{data.status}, 0)}"
}

куда data.status это статус распространяется от родителя и 0 это каскадное состояние. Вы получаете дрейф.

fn:eq это встроенная функция. Проверьте здесь для всех доступных функций здесь

Вы также можете создавать и регистрировать свои собственные пользовательские функции.

PS почему не реагируют родные?

Использование PPS proteus тег в вопросах, связанных с протей, поэтому я пропустил это.

Другие вопросы по тегам