2012-05-04 3 views
0

한 페이지에 50 개 이상의 체크 박스가있는 프로그램이 있습니다. 그리고 어떤 상자가 선택되어 있는지 확인해야합니다.어떤 체크 박스가 선택되었는지 확인

CheckBox cb1 = (CheckBox) findViewById(R.id.checkBox1); 
CheckBox cb2 = (CheckBox) findViewById(R.id.checkBox2); 

if (cb1.isChecked){ 
//get Checkbox name 
} 
if (cb2.isChecked){ 
//get Checkbox name 
} 

을하지만 더 다음 50 개 확인란이 작업을 수행해야하는 경우, 그 시간이 좀 걸릴 것입니다 :

는 나는이 같은 somehting을 수행 할 수 있습니다 알고 있습니다. on이 어떤 것이 선택되었는지 빠르게 확인하는 방법인가요? 다음과 같이 입력하십시오 :

int i; 

for (i = 0; i<checkBox.length; i++){ 
    CheckBox cb+i = (CheckBox) findViewById (R.id.checkBox+i); 

    if (cb+i.isChecked){ 
    //get Checkbox name 
    } 
} 

더하기 다음을 선택하는 것이 좋습니다. 1 개 이상의 체크 박스를 선택할 수 있습니다. 내가 무슨 뜻인지 알기를 바랍니다.

덕분에 이미 Bigflow

+0

컨테이너의 하위 루프를 가져 와서 유형이 CheckBox인지 확인한 다음 선택되어 있는지 확인하십시오. – DaTroop

+1

당신은 CheckedListView에 가야한다. 그것은 선택된 것의 위치를 ​​반환 할 것이다. 레이아웃 –

답변

1

를 오버라이드 (override) 다른 해결 방법이 될 수있다

LinearLayout layout= (LinearLayout)findViewById(R.id.checkbox_container); 
ArrayList values = new ArrayList(); 
for(int i=0; i<layout.getChildCount(); i++) 
{ 
    View v = layout.getChildAt(i); 
    if(v instanceof CheckBox) 
    { 
     CheckBox cb = (CheckBox)v; 
     if(cb.isChecked()) 
     values.add(cb.getText().toString()); 
    } 
} 
+0

이봐, 나는 이것을 사용했다. 내가 가지고 있기 때문에 , 나는 조금 수정했다 : <상대 레이아웃을 <있는 ScrollView Bigflow

+0

어쩌면 바보 같은 질문이지만 : 나는 또한 TableRow1, TableRow2 등 만 1 TableLayout을 (모든있어 행이이 TableLayout 안에 있으면 어떻게 TableLayout 내의 모든 TableRow 내에서 확인할 수 있습니까? – Bigflow

0

당신 체크 박스에서 배열을하고보다 것은 당신이 얼마나 확인란을 잘 모릅니다 때

CheckBox[] achecker = new CheckBox[50]; 
achercker[0] = new CheckBox(context); 

또는 ArrayList에와

이 더 나은 레이아웃에 코드에 따라 추가 할 수 있습니다

ArrayList<CheckBox> lchecker = new ArrayList<CheckBox>(); 
lchecker.add(new CheckBox(context)); 
0

체크 박스에 수신기를 설정하십시오.

당신이 LinearLayoutCheckBox을 추가 한 가정 해 당신은 자바에서 LinearLayout 참조를 얻을이 같은 아이 뷰 얻을 수 있습니다 : checkbox1.setOnCheckChangedListener(this) 다음

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ 
if (isChecked){ 
      // to determine which checkbox use buttonView.getId(); 
     } 
} 
+0

에 50+ 체크 박스를 추가하는 것은 좋지 않으므로 그에게 50 청문회를 말하도록 리스너를 추가하는 것이 좋습니다. –

0

을 아래에서이 값을 사용해보십시오. 개수를 기준으로 ID를 설정하십시오.

ArrayList<Boolean> booleanList = new ArrayList<Boolean>();

for(int counter=0; counter<50; counter++) { 
     booleanList.add(false); 
     CheckBox chkBox = new CheckBox(this); 
     chkBox.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1)); 
     chkBox.setId(counter); 
     chkBox.setOnClickListener(chkBoxOnClickListener); 
} 

private OnClickListener chkBoxOnClickListener = new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     int chkboxID = ((CheckBox)view).getId(); 
     chkBox = (CheckBox) findViewById(chkboxID); 
      if(chkBox.isChecked()) { 
       booleanList.set(chkBox, true); 
      } 

     } 
}