2012-02-21 84 views
0

我有一个使用web服务加载测验的Android应用程序。测验由几个问题组成,所以我需要动态构建布局,因为问题的数量可能会有所不同。在运行时加载动态布局

我的界面是这样的:

<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> 

我已经创建了一个包含应该用来表明应instatiated对于每个问题,并注入里面的问题和答案的布局的样本另一个XML ViewFlipper。

我的问题是什么应该是正确的方法来完成这项任务?我是否需要手动创建并插入viewflipper中的所有视图,或者是否可以使用我创建的模板?

每个问题也会有一些按钮(选择答案),我需要将结果保存到我可以提交给服务器并计算最终得分。

即使我必须更改应用程序的结构以使其更易于编写代码,我也希望能够实现此目的。

谢谢!

+0

你有没有想过像ListView或ViewPager的AdapterView? – 2012-02-22 09:23:06

回答

0

我会建议在运行时在代码中创建和插入你的小部件。否则,您将从您使用的XML布局中获得固定数量的项目(除非您随后开始动态创建并向该布局添加小部件,这就是您可以立即执行的操作)

所有你需要做的是获取要添加项目的视图的句柄,创建所需的小部件,然后调用目标视图的addView方法。下面是一个从我写的一些测试代码动态添加多个TextViews的例子:

//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++; 
     } 
     }