0

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

问题是在将数据传递给应用程序之前,您不知道会有多少问题,也不知道答案的格式。因此,一项调查可能有 10 个问题,带有 3 个复选框、3 个微调器,和 4 个编辑文本,下一个可能有 50 个问题,其中一半是编辑文本,一半是复选框。在数据来自带有调查问题/答案的远程服务器之前,没有办法知道。

问题将始终是文本视图。但是,我对如何让布局通过复选框、微调器等实时膨胀答案感到困惑。可能的答案将具有某种类型的标识符,让应用程序知道它们是复选框、微调器等。

如果您仍然迷失在这里是一个快速而粗略的图表

调查1

Q1) TextView A1) 3 CheckBox 答案

Q2) TextView A2) 10 个微调答案

Q3) TextView A3) EditText

现在调查一已完成,调查二进入相同的活动、布局、片段或其他任何内容,并且它有这些数据

调查2

Q1) TextView A1) 3 CheckBox 答案

Q2) TextView A2) 3 CheckBox 答案

Q3) TextView A3) 3 CheckBox 答案

Q4) TextView A4) 3 EditText 答案

Q5) TextView A5) 3 EditText 答案

Q6) TextView A6) 3 EditText 答案

所以你看到问题了吗?我不能简单地使用列表视图、3 个复选框或 3 个文本视图进行布局并为它们提供数据,因为我什至不知道需要什么类型的字段或需要多少字段。我知道这不是一个简单的问题,可能需要更多信息。这只是我一直试图围绕背后的逻辑思考的事情,我根本不知道有什么方法可以做到这一点。

4

1 回答 1

1

我认为您应该使用ListView问卷调查,其中每个项目都是一个问题。每种问题都有自己的布局 xml 文件。这将为您提供所需的大部分功能,因此这是一个很好的起点。

对于那些响应选项数量可变的问题类型,您将不得不以编程方式将额外字段添加到视图中或从视图中删除多余字段,然后再从ListAdapter's getView 方法返回。您可以在 Java 代码中扩充或添加new一些视图,并将它们添加到您设计的问题类型特定的 xml 视图中。LayoutParametersLinearLayout

粗略地说,您的适配器的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;
}
于 2013-05-08T06:45:43.923 回答