마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

체크박스에 관한 질문입니다.

0 추천
전체선택여부체크박스,1번체크박스, 2번체크박스, 3번체크박스 이렇게 총 4개의 체크박스가 있다고 하면요

 

create부분에 전체선택 체크박스 클릭여부를 아래와 같이 넣었습니다.

chk__all.setOnCheckedChangeListener(new OnCheckedChangeListener(){
 public void onCheckedChanged(CompoundButton buttonView,
  boolean isChecked) {
  if(buttonView.getId()==R.id.checkAll){
   if(isChecked){
    chk_1.setChecked(true);
    chk_2.setChecked(true);
    chk_3.setChecked(true);
   }else{
    chk_1.setChecked(false);
    chk_2.setChecked(false);
    chk_3.setChecked(false);
   }
  }
 }
});
 

이런경우 전체선택/해제는 잘 됩니다. 문제는 만약 전체선택을 해놓고, 그중에 1,2,3 중에 하나를 체크해제하게 되면 All이라는 체크박스는 해제되지 않고 선택된채로 남게 됩니다

 

1,2,3중에 하나를 해제할 시 all이라는 체크박스를 해제하게 되면 위의 로직때문에 전체가 다 해제되어 버리더라구요..

 

어떻게 제어하면 될지 팁 있으시면 알려주시면 감사하겠습니다...
익명사용자 님이 2013년 4월 4일 질문

1개의 답변

0 추천
 
채택된 답변

안녕하세용.

체크박스가 3개라면 다음과 같이 하면 어떨까 합니다.

 

package com.example.teestttt;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;

public class MainActivity extends Activity {

	private CheckBox chk__all = null;
	private CheckBox chk_1 = null;
	private CheckBox chk_2 = null;
	private CheckBox chk_3 = null;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		chk__all = (CheckBox) findViewById(R.id.checkBox1);
		chk_1 = (CheckBox) findViewById(R.id.checkBox2);
		chk_2 = (CheckBox) findViewById(R.id.checkBox3);
		chk_3 = (CheckBox) findViewById(R.id.checkBox4);
		
		chk__all.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(chk__all.isChecked()){
					chk_1.setChecked(true);
					chk_2.setChecked(true);
					chk_3.setChecked(true);
				}else{
					chk_1.setChecked(false);
					chk_2.setChecked(false);
					chk_3.setChecked(false);
				}
			}
		});
		
		chk_1.setOnClickListener(onCheckBoxClickListener);
		chk_2.setOnClickListener(onCheckBoxClickListener);
		chk_3.setOnClickListener(onCheckBoxClickListener);
	}
	
	private OnClickListener onCheckBoxClickListener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			if(isAllChecked()){
				chk__all.setChecked(true);
				
			}else{
				chk__all.setChecked(false);
			}
			
		}
	};
	

	private boolean isAllChecked(){
		return (chk_1.isChecked() && chk_2.isChecked() && chk_3.isChecked()) ?  true :  false;
	}
}

test코드를 하나 짜보았습니다. 

참고하세용~

앙드로이등 (850 포인트) 님이 2013년 4월 5일 답변
와 정말 감사합니다!! 체크박스에 onclicklistener를 적용할 생각을 못했네요
정말정말 감사합니니다!!!
...