2013-05-08 70 views
0

对我来说很裸露,因为它很快变得相当复杂。Android:从外部数据创建xml布局元素

我有一个问题列表,需要不同的答案元素。具体问题1可能有checkbox答案问题2可能有spinner与答案array和问题3可能有EditText,因此用户可以键入答案。

问题是,直到数据传递到应用程序,你不知道会有多少问题,你不知道答案将会在什么格式。因此,一项调查可能有10个问题,3个复选框,3个旋转器和4个编辑文本,下一个可能有50个问题,半编辑文本半复选框。直到从调查问题/答案的远程服务器传入数据时,无法知道。

问题将始终是文本视图。 但是我难以理解如何使用复选框,旋转器等实时回复膨胀版本。可能的答案会有一些类型的标识让应用程序知道它们是复选框,旋转器等。

如果你在这里还是输了是一个快速和原油图

调查1

Q1)的TextView A1)3复选框答案

Q2)的TextView A2)10微调的swers

Q3)的TextView A3)的EditText

现在调查一个被完成,调查2进入相同的活动,布局,片段或任何与它有这个数据

survey2

Q1)的TextView A1)3复选框答案

Q2)的TextView A2)3复选框答案

Q3)的TextView A3)3复选框答案

Q4)的TextView A4)3的EditText答案

Q5)的TextView A5)3的EditText答案

Q6)的TextView A6)3 EditText答案

所以你看到了问题?我不能简单地使用listview或3个复选框或3个textView进行布局,并为它们提供数据,因为我甚至不知道需要什么类型的字段或多少个字段。 我知道这不是一个简单的问题,可能需要更多的信息。这只是我一直试图将我的头围绕在逻辑背后,而我根本不知道有什么办法可以做到这一点。

+1

你应该使用viewFlipper.It很容易实现这种类型的requirement.you必须通过根据部件的数量,并他们可以动态添加它们。您可以添加任意数量的组件。这只是一个简单的想法。 – TheFlash 2013-05-08 07:00:22

+0

非常好的主意,我可能包含与下面的解决方案,以获得预期的效果 – IrishWhiskey 2013-05-08 15:50:38

回答

1

我认为你应该使用一个ListView为问卷,其中每个项目是一个单一的问题。每种问题都有自己的布局xml文件。这可以让你获得大部分所需的功能,所以这是一个很好的开始。

对于这些问题类型,其中的响应选项的数目是可变的,你将不得不以编程额外的字段从视图从ListAdapter的getView方法返回之前添加或删除多余的字段。您可以充气或new在Java代码中的一些观点和LayoutParameters,并将它们添加到您设计到的问题类型的特定XML视图LinearLayout

在粗线条,你的适配器的getView()方法将是这个样子:

public View getView(int pos, View coV, ViewGroup parent) { 
    View result = //inflate view for question type 
    if (/* questiontype has variable number of answers */) { 
     LinearLayout answersParent = (LinearLayout) result.findViewById(/* id */); 
     for (int i = 0, max = question.numAnswers(); i < max; i++) { 
      View answerView = //inflate or new the View for the answer type 
      // Configure answerview 
      answersParent.addView(answerView); 
     } 
    } 
    return result; 
} 
+0

辉煌的解决方案,这正是我一直在寻找。我不能合乎逻辑地想到这将如何工作,但你是100%正确的。只要传入的数据具有字段类型的标识符,它将需要,比如'list dialog'或'checkbox'等,我可以编程该语句以便动态布局。非常感谢你 – IrishWhiskey 2013-05-08 15:49:56