在 Android 视图中动态加载级联问题
Dynamically load cascading Questions in Android View
我们目前正在开展一个项目,其中网络用户创建了一个包含级联问题的调查(级联意味着问题的答案很少,并且取决于这些答案,其余的问题会发生变化),然后移动用户应该在他们的 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
根据用户给其他人的问题的答案必须动态加载。
这可能为时已晚,但可以了。这可以在 proteus
.
中完成
Philosophy: How would you do it in Native Android?
通过创建自定义视图,我们将其命名为 SurveyView
,它具有 3 个自定义属性
status
: 初始条件
cascade
: 校验条件
survey
: child SurveyView
数组
因此,在 Native Android 中,将有一个方法 setStatus()
将在选择答案时调用。这将设置 status
的 child 调查视图。 child 将根据设置的条件检查新的 status
。如果匹配,则为 visible
else gone
.
在此之后,只需将其注册为 proteus 的自定义视图即可。在没有自定义视图的情况下,有一种稍微复杂的方法(通过像这样使用函数绑定。
{
"visibility: "@{fn:eq(@{data.status}, 0)}"
}
其中data.status
是从parent向下传播的状态,0
是级联条件。你明白了。
fn:eq
is a built-in function. Check here for all available functions here
您也可以创建和注册自己的自定义函数。
P.S。为什么不反应本机?
P.P.S在proteus相关的问题中使用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
根据用户给其他人的问题的答案必须动态加载。
这可能为时已晚,但可以了。这可以在 proteus
.
Philosophy: How would you do it in Native Android?
通过创建自定义视图,我们将其命名为 SurveyView
,它具有 3 个自定义属性
status
: 初始条件cascade
: 校验条件survey
: childSurveyView
数组
因此,在 Native Android 中,将有一个方法 setStatus()
将在选择答案时调用。这将设置 status
的 child 调查视图。 child 将根据设置的条件检查新的 status
。如果匹配,则为 visible
else gone
.
在此之后,只需将其注册为 proteus 的自定义视图即可。在没有自定义视图的情况下,有一种稍微复杂的方法(通过像这样使用函数绑定。
{
"visibility: "@{fn:eq(@{data.status}, 0)}"
}
其中data.status
是从parent向下传播的状态,0
是级联条件。你明白了。
fn:eq
is a built-in function. Check here for all available functions here
您也可以创建和注册自己的自定义函数。
P.S。为什么不反应本机?
P.P.S在proteus相关的问题中使用proteus
标签,这就是我错过这个的原因。