2016-05-11 49 views
0

我想獲取動態添加的複選框的值,但是當我想查看是否有一個checkBox.isChecked();它只響應當我檢查創建的最後一個複選框!這是我的容器。如何從動態添加複選框獲取ID和它們的值

for (String answer : multiMap.get(questionFromMultiMap)) 
     { 

      i++; 
      et_button = (CheckBox) getLayoutInflater().inflate(R.layout.numberofchoices, null); 
      et_button.setText(answer); 
      et_button.setId(i); 
      container.addView(et_button); 
      listOfChoice.add(answer); 


     } 

我要檢查它的檢查這樣的:

btnCorrect.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     if (et_button.isChecked()){ 
      System.out.println(et_button.getId()); 
     }else{ 
      System.out.println("pouet"); 
     } 

     } 
    }); 

對谷歌沒有找到正確的答案! 感謝您的幫助

+0

檢查這個答案︰http://stackoverflow.com/questions/8460680/how-can-i-assign-an-id-to-a-view-programmatically –

+0

我已經檢查了這個答案,我試過但我可以不要使這個工作:/ –

+0

或者你可以使用標籤http://stackoverflow.com/questions/7455897/how-do-i-to-findviewbytag –

回答

1

當您調用et_button.isChecked()時,會在最後一個充氣視圖上調用它,導致您在循環的每次迭代中覆蓋它。 你應該在列表中添加他們,而不是,然後在其中一個被選中的onClickListener檢查:

List<CheckBox> list = new LinkedList<>(); //this should be visible from onClickListener, so it should be an instance field 

for (String answer : multiMap.get(questionFromMultiMap)) { 
     i++; 
     CheckBox et_button = (CheckBox) getLayoutInflater().inflate(R.layout.numberofchoices, null); 
     et_button.setText(answer); 
     et_button.setId(i); 
     list.add(et_button); 
     container.addView(et_button); 
     listOfChoice.add(answer); 
    } 

btnCorrect.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     for(CheckBox cb : list) { 
     if (cb.isChecked()){ 
      System.out.println(cb.getId()); 
     }else{ 
      System.out.println("pouet"); 
     } 
     } 
    } 
}); 

沒有測試它,但它應該工作。

+0

它的工作,所以你只是添加列表中的每個複選框,但我不明白循環(複選框cb:列表)可以解釋你嗎? –

+0

for循環是需要的,因爲每個checbox都是帶有ID的不同對象,沒有循環檢查最後添加的對象的ID,如果選中了每個checbox,就會檢查循環。 請考慮接受答案,如果它適合你! –