2011-08-17 11 views
2

배열의 클릭시 해당 확인란의 색인을 저장하는 확인란이 있습니다. 확인란을 선택하지 않으면 값이 배열에서 제거되도록 기능을 추가하려고합니다.unclick에서 배열 값 제거

다음은 배열에 확인란 값을 저장하는 루프입니다. 그런 다음 선택한 배열을 내 스크립트의 다른 태그 배열과 비교합니다. 따라서 사용자가 체크 박스를 클릭하고 클릭을 해제하면 값은 여전히 ​​참입니다.

      CheckBox[] setOfCheckBoxes = new CheckBox[] 
              { 
             (CheckBox) findViewById(R.id.checkBox1), 
             (CheckBox) findViewById(R.id.checkBox2),  
             (CheckBox) findViewById(R.id.checkBox3), 
             (CheckBox) findViewById(R.id.checkBox4), 
             }; 
      for (int i = 0; i < setOfCheckBoxes.length; i++) { 

       final int index = i; 
        setOfCheckBoxes[i].setOnClickListener(new View.OnClickListener(){  
         public void onClick(View v) {  
         selected[index] = ((CheckBox) v).isChecked(); 
         } 
        }); 
       } 

동일한 루프에서 선택 취소해야합니까?

+0

[i] = setOfCheckBoxes [i] .isChecked();를 추가하면 더 좋을 것입니다. for 루프 내부. –

답변

2

당신은 이미 그것을하고 있습니다. 당신의 체크 박스를 선택하면

selected[index] = ((CheckBox) v).isChecked(); 

, 당신의 selected[index]false 될 것 true 다른 것입니다.

selected[]new boolean[setOfCheckBoxes.length]으로 초기화하고 모두 false로 설정했다고 가정합니다.

+0

그러나 나는 그들이 그것을 체크하고 체크를 해제하면 인덱스가 여전히 선택되어 있다고 생각한다. – Denoteone

+0

당신은 바울이 선택되었지만 나중에 두 개를 비교할 태그 배열의 길이로 설정되었습니다. – Denoteone

+0

클릭 수신기는 체크 여부에 관계없이 호출해야합니다. 따라서 선택한 [인덱스]가 true와 false 사이를 전환해야한다고 가정합니다. – Kal

1

내가 틀렸다고 정정하십시오. 체크 박스의 상태를 볼 수도 있습니다 :

for (int i = 0; i < setOfCheckBoxes.length; i++) { 
    selected[i] = setOfCheckBoxes[i].isChecked(); 
} 
+0

@Denoteone, onClicklisteners를 설정하는 대신 URL을 만드는 최종 이벤트에서 위 작업을 수행하는 것이 좋습니다. 보다 직선적 인 구현은 배열에 넣은 다음이를 사용하는 것보다 직접적으로 값을 사용하는 것입니다. – Ronnie