2012-02-21 3 views
0

webservice를 사용하여 퀴즈를로드하는 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에 대해 생각해 보셨습니까? –

답변

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++; 
     } 
     } 
관련 문제