我有一个Android应用程序,可以使用webservice加载测验。该测验由几个问题组成,因此我需要动态构建布局,因为问题的数量可能会有所不同。
我的界面是这样的:
<LinearLayout android:orientation="vertical">
<ViewFlipper>
Question and possible answers ...
</ViewFlipper>
<HorizontalScrollView>
one button dynamically created for each question so I can navigate through the quiz...
</HorizontalScrollView>
我创建了另一个xml,其中包含一个布局样本,该样本应该用于显示应该为每个问题实例化并在ViewFlipper中注入的问题和答案。
我的问题是什么应该是正确的方法来完成这项任务?我是否需要在viewflipper中手动创建和插入所有视图,或者我可以使用我创建的模板吗?
每个问题也会有一些按钮(选择答案),我需要保存结果,我可以将它们提交给服务器并计算最终得分。
即使我必须更改应用程序的结构以便更容易编码,我也会很感激一些想法。
谢谢!
答案 0 :(得分:0)
我建议在运行时在代码中创建和插入小部件。否则,您将从您使用的XML布局中获得固定数量的项目(除非您开始动态创建并向该布局添加小部件,这就是您可以立即执行的操作)
您需要做的就是获取要添加项目的视图的句柄,创建所需的窗口小部件,然后调用目标视图的addView方法。这是一个从我写的一些测试代码动态添加多个TextView的例子:
//Getting String[] data from intent
String parts[] = myIntent.getStringExtra("parts");
int length = parts.length;
//Control ID's must NOT be zero, starting at 10
int ids = 10;
for (int i = 0; i < length; i++)
{
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
TextView nextItem = new TextView(this);
//Again, NEVER ZERO
nextItem.setId(ids);
nextItem.setText(parts[i]);
//Checking if this is the first item added and setting it to be below the info widget (you can use any widget with an ID in your view)
if(i==0)
{
params.addRule(RelativeLayout.BELOW, R.id.info);
}
else
{
params.addRule(RelativeLayout.BELOW, ids-1);
}
nextItem.setLayoutParams(params);
thisView.addView(nextItem, params);
ids++;
}
}