2012-02-21 12 views
0

私はwebserviceを使ってクイズを読み込むAndroidアプリケーションを持っています。そのクイズはいくつかの質問から成り立っているので、質問の数が変わる可能性があるため、レイアウトを動的に構築する必要があります。実行時に動的レイアウトを読み込む

私のインタフェースは、このようなものです:私は、各質問のためinstatiatedと内部に注入する必要がある質問と回答を表示するために使用されなければならないレイアウトのサンプルを含む別のXMLを作成している

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

ViewFlipper。

私の質問は、このタスクを実行するための正しいアプローチでなければなりません。 viewflipper内のすべてのビューを手動で作成して挿入する必要がありますか、作成したテンプレートを使用することはできますか?

各質問にはいくつかのボタン(回答を選択)があり、結果をサーバーに送信して最終スコアを計算するために結果を保存する必要があります。

コードの作成を容易にするためにアプリケーションの構造を変更しなければならない場合でも、これを達成するためのアイデアはありがたいです。

ありがとうございます!

+0

ListViewやViewPagerのようなAdapterViewについて考えましたか? –

答えて

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++; 
     } 
     } 
関連する問題