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

짜이뚱님 체크리스너에 대한 재 질문점.

0 추천
if(cb1 == buttonView) {
     if() {

//  구현내용

}
     cb2.setChecked(false);
     cb3.setChecked(false);
     cb4.setChecked(false);
    }

 

이 소스에서 보면 1번을 누르면 2,3,4 에 대해서 체크가 해제 됩니다.

이런식으로 해서 cb1 == buttonView 에서 cb1 을 cb2 로 바꾸고

나머지 체크드에서 2를 제외한 1,3,4 를 하면 체크가 해제되고 2만 체크 되고여,

그런데 여기서 1번을 트루자로 지정했다면, 1번을 누를시에 체크가 되는건 맞고, 다시 한번 누를시 "아무 동작이 하지 않거나, 체크가 해제되지 않게" 하는 방법이 없을까요???

 

지금 저 소스만 쓴게 아니고 저 기능 이하에 여러가지 소스들이 있고, 시간상 리팩토링에는 지장이 많을거 같습니다.

라이도버튼으로 하기에는 정렬이 오리엔테이션만 지원이 가능해서 이 기능으로 쓴것이고여.. 체크체인지 에서 클릭리스너로 교체 하라는 말씀 이신가요

체크리스너 안에 클릭리스너를 추가하라는 말씀 이신지 잘 모르겠습니다...
이게뭐야d (1,040 포인트) 님이 2013년 3월 11일 질문

2개의 답변

0 추천
 
채택된 답변

제가 드린 말씀은 체크리스너를 삭제하고 클릭리스너로 바꾸라는 말씀 이었습니다.~~!

체크 리스너는 모두 지우시구요....

체크버튼에 체크리스너 대신 클릭리스너를 다시면 됩니다...

 

public class MainActivity extends Activity implements OnClickListener {
CheckBox ck1;
CheckBox ck2;
CheckBox ck3;
CheckBox ck4;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ck1 = (CheckBox) findViewById(R.id.checkBox1);
ck2 = (CheckBox) findViewById(R.id.checkBox2);
ck3 = (CheckBox) findViewById(R.id.checkBox3);
ck4 = (CheckBox) findViewById(R.id.checkBox4);
 
ck1.setOnClickListener(this);
ck2.setOnClickListener(this);
ck3.setOnClickListener(this);
ck4.setOnClickListener(this);
}
 
@Override
public void onClick(View v) {
if (v.getId() == ck1.getId()) {
ck1.setChecked(true);
ck2.setChecked(false);
ck3.setChecked(false);
ck4.setChecked(false);
} else if (v.getId() == ck2.getId()) {
ck1.setChecked(false);
ck2.setChecked(true);
ck3.setChecked(false);
ck4.setChecked(false);
} else if (v.getId() == ck3.getId()) {
ck1.setChecked(false);
ck2.setChecked(false);
ck3.setChecked(true);
ck4.setChecked(false);
} else if (v.getId() == ck4.getId()) {
ck1.setChecked(false);
ck2.setChecked(false);
ck3.setChecked(false);
ck4.setChecked(true);
}
}
 
}
 
너무 고생하시는것같아 풀소스 만들어 드립니다....
그리고 라디오 버튼 버티컬도 되는데.... ^^
익명사용자 님이 2013년 3월 11일 답변
이게뭐야d님이 2013년 3월 11일 채택됨
checkButton1        checkButton2
checkButton3        checkButton4
이런식으로 만들어야 되서요... ㅋㅋ
네 정보좀 더 얻어가시라고 덧글을 드리면....
위와같이 위치시키시려면 라디오 버튼을 하나하나 위치시켜놓고 라디오그룹을 묶으시면 되는데... ^^
클릭리스터로 교환하니까 재클릭할때 변하는 증상은 없습니다.
그런데 클릭이 계속 되서 이벤트가 발생하는데
클릭을 1회성으로 제한 하는 방법이 없을까요
if (v.getId() == ck1.getId()) {
            Log.e("asldkjasldjk", ".a;skdlkajsd");
            ck1.setChecked(true);
            ck2.setChecked(false);
            ck3.setChecked(false);
            ck4.setChecked(false);
            ck1.setEnabled(false);
            ck2.setEnabled(true);
            ck3.setEnabled(true);
            ck4.setEnabled(true);
        } else if (v.getId() == ck2.getId()) {
            Log.e("aaaaaaaa", ".a;skdlkajsd");
            ck1.setChecked(false);
            ck2.setChecked(true);
            ck3.setChecked(false);
            ck4.setChecked(false);
            ck1.setEnabled(true);
            ck2.setEnabled(false);
            ck3.setEnabled(true);
            ck4.setEnabled(true);
        } else if (v.getId() == ck3.getId()) {
            ck1.setChecked(false);
            ck2.setChecked(false);
            ck3.setChecked(true);
            ck4.setChecked(false);
            ck1.setEnabled(true);
            ck2.setEnabled(true);
            ck3.setEnabled(false);
            ck4.setEnabled(true);
        } else if (v.getId() == ck4.getId()) {
            ck1.setChecked(false);
            ck2.setChecked(false);
            ck3.setChecked(false);
            ck4.setChecked(true);
            ck1.setEnabled(true);
            ck2.setEnabled(true);
            ck3.setEnabled(true);
            ck4.setEnabled(false);
        }

^^;
이렇게 하면 selector에서 enable속성 false로도 설정해줘야 합니다.
그리고 이 기능으로 할거면 굳이 체크 버튼으로 하지 않아도 되구요 ㅎㅎ;;

그리고 굳이 체크 버튼을 사용하시겠다면
enable 속성을 사용 하지 않고 조건문을 수정하시면 될거 같습니다.
if(v.getId() == ck1.getId() && ck1.isChecked() == false){
}
0 추천
순수 저기능만 하실거면....

체크리스너보다는 그냥 onClick에서 처리 하시는게 나은거 같습니다.

 

그리고 한번 클릭된 버튼이 다시 클릭 안되게 하실거면 check버튼보다는 setEnable 속성을 이용하시는게 좋습니다.

enable을 falst로 주면 버튼은 클릭이벤트가 동작 하지 않습니다.
익명사용자 님이 2013년 3월 11일 답변
...