말씀하신 답변잘 보았습니다. ㅜㅜ 저도 초보라 이해가 안가서 그러는데 질문드리겠습니다.
저는 현재 심플커서어답터로 해서 뿌려주고있습니다.
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.income_layout, cursor, new String[] {"date", "category", "price"}, new int[] {R.id.days, R.id.income_category, R.id.income_money}); setListAdapter(cursorAdapter); 근데 말씀하신 setChoicemode는 커스틈리스트부에서는 적용안되는것 아닙니까??? 현재저는 ㅜㅜ 커스텀 리스트뷰에 체크박스를 clickable ="false"로준 상태입니다 따라서 체크를 눌러도 체크가 안됩니다 !!!!!! 하지만 체크를 누르면 그에 해당하는 리스트를 선택은 됩니다. 체크 박스든 행을 누르면 그 리스트의 포지션 값을 읽어 오는 것은 됬습니다. 하지만 눌렀는데 옆에 체크모양을 하고 싶은데 안되네요 ㅜㅜㅜㅜㅜㅜcb.setClickable("true")뭐 이런식으로 주면될까했는데 에러가납니다 ㅜㅜㅜㅋ
글로만 써서 의미전달이 제대로 될지 모르겠네용.. -_-;; 예전에 아래와 같이 하긴했는데 ㅋㅋ 참고해주세용.
일단 커스텀리스트뷰를 사용하신다고 했으니...커스텀 리스트뷰xml에 아래 같이 체크 박스를 넣습니다.
<CheckBox android:id="@+id/check1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:paddingRight="10dp"
android:focusable="false"/>
와 같이 체크박스를 넣어주구요.
자바 getView에서는
CheckBox cb = (CheckBox) row.findViewById(R.id.check1);
cb.setOnCheckedChangeListener(this);
cb.setId(position); // 체크박스에 임의의 아이디를 지정합니다. 0부터 시작합니다. getView의 position인자값이 0부터 시작이니
cb.setChecked(배열형태의변수[positon]); // 각 리스트의 체크박스의 체크여부를 담고 있는 변수입니다.
와 같이 체크박스를 세팅해줍니다.
저렇게 세팅하는 이유는 리스트가 변경되어 새로고침할시 기존에 선택한 값이 날아가면 안되니깐...
체크박스에 임의의 아이디를 부여하고 체크값도 전부 변수에 담아서 새로고침할시에도 선택값들을 보여주기위해서입니다.
(초기화는 전부 false로 하시면 됩니당.)
그리고 onCheckedChanged 메소드를 오버라이드 하여 체크/비체크를 바꿔서 리스트를 새로고침 해주시면 됩니당.
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int index = (int)buttonView.getId();
여기에서는 클릭한 체크박스의 아이디를 이용해 현재 클릭상태면 비클릭상태로
클릭상태면 비클릭상태로 바꿔줍니다.
.....
}
아 감사합니다.
CheckBox cb = (CheckBox) row.findViewById(R.id.check1);
cb.setOnCheckedChangeListener(this);
cb.setId(position); // 체크박스에 임의의 아이디를 지정합니다. 0부터 시작합니다. getView의 position인자값이 0부터 시작이니
cb.setChecked(배열형태의변수[positon]); // 각 리스트의 체크박스의 체크여부를 담고 있는 변수입니다.
이부분이 근데 이해가 가지 않는군여 getView()는 전 쓰지 않는 상태이고
onlistItemClick을 쓰고있어요 여기서도 view를 받아오는것 같은데 따로 getView()를 써줘야할까요 ??
현재 진행된상태는
-------------------------------------
날짜 품목 금액 체크박스
--------------------------------------
20111212 식비 4000 V(off)
------------------------------------
이런 상태에서 , 각 행의 어느곳이든 누르면 체크박스가 On이 되게 하고싶습니다.
현재, 클릭시 position과 long을 받아와, 다른 액티비티로 long값을 넘겨 DB수정하는것 까지 됬습니다.
단지 체크박스가 클릭이 되면 불이 들어와야하는데 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ안들어와요 ㅜㅜㅋ
소중한 답변 감사드립니다!!




음....체크박스를 이용해서 하고자 하는 기능이 수정, 삭제 두 가지 인건가요?
일단 리스트뷰의 api 중에 setChoiceMode 라고 있습니다.
이 api 를 이용하면 리스트의 각 행을 singleChoiceMode 나 multipleChoiceMode 로 설정 할 수 있어요....
그 후에 리스트 행의 position 값을 이용해 해당 아이템이 선택이 된 아이템인지 아닌지도 알 수 있죠....
각 행의 선택여부에 따라 체크박스의 체크값을 변경하면 될 듯 하네요....
근데 수정시 멀티체크가 안되게 하려면 수정/삭제 중 어떤 기능을 할건지 먼저 사용자에게 선택하게 한 후에
리스트뷰의 모드값을 변경 하셔야 할듯 한데....저도 초보라서 이정도밖에는 모르겠네요 ㅠㅠ