在Android视图中动态加载级联问题

时间:2017-12-20 06:35:37

标签: android json cascade proteus

我们目前正在开展一个项目,在这个项目中,网络用户创建一个包含级联问题的调查(级联意味着问题几乎没有答案,并且依赖于这些答案,其余的问题会发生变化)然后移动用户应该在他们的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,proteus。从所有这些我们可以传递一个json并加载视图,但如果有级联问题,他们可以使用。

通过一个例子进一步阐述问题: 假设用户被问到Do you have any have kids?的问题。这个问题可能有两个答案。 Yes& No取决于用户给别人提出问题的答案,必须动态加载。

1 个答案:

答案 0 :(得分:2)

这可能为时已晚,但现在可以了。这可以在proteus

中完成
  

哲学:你如何在原生Android中做到这一点?

通过创建自定义视图,我们将其称为SurveyView,其中包含3个自定义属性

  1. status:初始条件
  2. cascade:检查条件
  3. survey:子SurveyView
  4. 的数组

    因此,在原生Android中,会有一个方法setStatus(),在选择答案时会调用它。这将设置子调查视图的status。孩子将根据他们设置的条件检查新的status。如果匹配,则为visible其他gone

    在此之后,只需将此注册为proteus的自定义视图。在没有自定义视图的情况下执行此操作的方式稍微复杂一些(通过使用类似的函数绑定。

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

    其中data.status是从父级向下传播的状态,0是级联条件。你得到漂移。

      

    fn:eq是一个内置函数。点击此处查看所有可用功能here

    您也可以创建和注册自己的自定义功能。

    P.S。为什么不反应原生?

    P.P.S在与proteus相关的问题中使用proteus标签,这就是为什么我错过了这个。