2012-03-02 49 views
0

我正在處理測驗應用程序。它包含兩種類型的測試。 第一個測試包含固定3個選項的問題。 * 第二個測試包含問題,但選項不固定。即基於問題的選項可以是4或5或6。 * 測試結束後,我需要顯示評論頁面。這裏是與固定選項第一類測試的瀏覽頁面代碼(Review頁面應該包含在那個時候會顯示測試問題)如何在android的列表視圖中動態顯示textviews?

我的代碼:

Review.java

public class Review extends Activity { 

    static ArrayList selectedoptionids = Test1.listarray; 
    static ArrayList<ArrayList<String>> questionslist = Test2.stringList1; 
    static ArrayList<ArrayList<String>> alloptionlist = Test2.optionstablelist; 
    static ArrayList<ArrayList<String>> all = new ArrayList<ArrayList<String>>(); 

    ListView list; 
    Button next; 
    String op1, op2, op3, op4, op5; 
    ArrayList<String> arr1; 
    ArrayList<String> arr2; 

    int a, i; 
    static int k = 0; 
    static int p = 1; 

    static List<mainlist> entirelist = new ArrayList<mainlist>(); 
    String quest; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.review); 

     list = (ListView) findViewById(R.id.listlist); 

     View header = getLayoutInflater().inflate(
       R.layout.listview_header_text, null); 
     list.addHeaderView(header, null, false); 

     View footerView = getLayoutInflater().inflate(
       R.layout.listview_footer_text, null); 
     list.addFooterView(footerView, null, false); 

     next = (Button) findViewById(R.id.next); 

     eachquestion(); 

     lvAdapter adapter = new lvAdapter(this, entirelist) { 
      public boolean areAllItemsEnabled() { 
       return false; 
      } 

      public boolean isEnabled(int position) { 
       return false; 
      } 
     }; 
     list.setAdapter(adapter); 
    } 


    public void eachquestion() { 
     arr1 = new ArrayList<String>(); 

     for (i = p - 1; i < p + 3; i++) { 

      arr1 = questionslist.get(i); 
      arr2 = new ArrayList<String>(); 

      for (int j = 0; j < 5; j++) { 

       arr2 = alloptionlist.get(0); 
        if (j == 0) 
         op1 = arr2.get(2); 

        else if (j == 1) 
         op2 = arr2.get(2); 

        else if (j == 2) 
         op3 = arr2.get(2); 
       } 

      } 

    entirelist.add(new mainlist(quest, op1, op2, op3)); 

     } 
    } 

} 

mainlist.java

public class mainlist { 
    String question,option1,option2,option3; 

    public mainlist(String question,String option1,String option2,String option3) { 
     super(); 
     this.question = question; 
     this.option1 = option1; 
     this.option2= option2; 
     this.option3 = option3; 
     } 

    public String getquestion() { 
     return question; 
    } 
    public void setquestion(String question) { 
     this.question = question; 
    } 

    public String getoption1() { 
     return option1; 
    } 
    public void setoption1(String option1) { 
     this.option1 = option1; 
    } 

    public String getoption2() { 
     return option2; 
    } 
    public void setoption2(String option2) { 
     this.option2 = option2; 
    } 

    public String getoption3() { 
     return option3; 
    } 
    public void setoption3(String option3) { 
     this.option3 = option3; 
    } 
} 

lvAdapter.java

public class lvAdapter extends BaseAdapter implements OnClickListener { 
    private Context context; 
    List<mainlist> list11 = Review.entirelist; 

    public lvAdapter(Context context, List<mainlist> list11) { 
     this.context = context; 
     this.list11 = list11 ; 
    } 
    public int getCount() { 
     return list11.size(); 
    } 
    public Object getItem(int position) { 
     return list11.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 


    public View getView(int position, View convertView, ViewGroup viewGroup) { 

     mainlist inst = list11.get(position); 

     if (convertView == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.reviewrow, null); 
     } 

     TextView question = (TextView) convertView.findViewById(R.id.textView2); 
     tvPhone.setText(inst.getquestion()); 

     TextView option1 = (TextView) convertView.findViewById(R.id.op1); 
     option1.setText(inst.getoption1()); 

     TextView option2 = (TextView) convertView.findViewById(R.id.op2); 
     option2.setText(inst.getoption2()); 

     TextView option3 = (TextView) convertView.findViewById(R.id.op3); 
     option3.setText(inst.getoption3()); 

     return convertView; 
    } 

    @Override 
    public void onClick(View v) { 

    } 
} 

現在我的問題是第一次測試,因爲我們知道的期權數量是3個,所以我已經寫了1個問題的setter和getter方法和3個選項,它是工作精細。但是對於第二種類型的測試,我如何編寫mainlist.java類來爲未知數量的選項生成setter和getter方法。

請幫我對此...我掙扎了這一點,因爲3天....

在此先感謝...

回答

2

好你需要的是做出class命名Quiz是這樣的:

public class Quiz 
{ 
    private String question; 
    private ArrayList<String> options; // no need to get separate variable for every option 
    public Quiz(String q, ArrayList<String> o) 
    { 
     super(); this.question = q; this.options = o; 
    } 
    //setter and getter.. like setOptions() getOptions() setQuestion() etc.. :/ 
} 

現在讓你entirelist一個QuizList這樣的:

List<Quiz> entirelist = new ArrayList<Quiz>(); 

現在通過單一測驗+ entirelist這樣的選項:

ArrayList<String> options = new ArrayList<String>(); 
options.add(op1); 
options.add(op2); 
options.add(op3); 
entirelist.add(new Quiz(quest,options)); 
現在

在適配器的getView(),刪除所有選項TextViews並將它們添加dnamically是這樣的:

public View getView(int position, View convertView, ViewGroup viewGroup) { 
     if (convertView == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.reviewrow, null); 
     } 
     Quiz currentQuiz = list11.get(position); 
     TextView question = (TextView) convertView.findViewById(R.id.textView2); 
     tvPhone.setText(currentQuiz.getquestion()); 

     // now add options dynamically.. 
     ArrayList<String> options = currentQuiz.getOptions(); 
     for(String option : options) 
     { 
      TextView optionTextView = new TextView(context); 
      optionTextView.setText(option); 
      convertView.add(optionTextView); 
     } 
     return convertView; 
} 
+0

你好感謝你......我會嘗試這樣的,會盡快給您 – RaagaSudha 2012-03-02 09:52:55

+0

您好我已經做了相同的正如你告訴....當我添加textview convertView像convertView.add(optionTextView); 它顯示錯誤..我可以如何解決這個問題? – RaagaSudha 2012-03-02 10:48:19

+0

實際上'convertView'是'View',它不能在裏面添加'View'。將其轉換爲'LinearLayout'或'RelativeLayout'或任何您在'reviewrow.xml'中作爲根元素使用的內容 – 2012-03-02 11:08:07

0

不要使用XML。

在Java中以編程方式添加視圖到佈局。然後,您可以動態地選擇適當數量的選項。

(幾乎)Android中您可以在XML中執行的所有操作都可以在Java代碼中完成。

相關問題