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

리스트뷰 클릭 시, 다른 행(?) 참조방법 질문

0 추천

설정 화면을 만들고 있는데요..리스트뷰로 구현했습니다.

여기서..클릭을 하면 클릭한 행의 오른쪽에 체크가 되도록 하려고 하는데요.

(이미지 뷰로 VISIBLE처리)

 

하나의 행만 체크가 되도록 하고 싶은데...잘 안되네요..

하나의 행을 체크 했을 때, 해당 행은 체크가 되고 다른 행들은 체크가 안되도록 로직을 심고 싶은데, 다른 행을 어떻게 참조해야할지 모르겠습니다.

검색을 해보긴 했으나,, 제가 못찾는건지...흑흑

도와주세요~

치솟음 (3,710 포인트) 님이 2015년 7월 20일 질문

3개의 답변

+1 추천
 
채택된 답변
1. adapter 안에 체크된 행의 position을 저장할 변수를 만듭니다.

int checkedPosition = -1;

 

2. getView()내에 체크된 행을 참조하여 체크상태를 변경하는 코드를 넣습니다.

checkbox.setChecked(position == checkedPosition);

 

3. checkbox 변경시 notification 시켜줍니다.

 

checkbox.setCheckedChangeListener(new ~~~~ {

  if (checked) {

    notifyDatasetChanged();

  }

});

 

아 이미지뷰네요.. 이미지뷰도 위에것 참고하셔서 비슷하게 하심 될듯
루지메이앙 (3,450 포인트) 님이 2015년 7월 20일 답변
치솟음님이 2016년 1월 12일 채택됨
크..제가 리스트뷰를 잘못이해하고 있는건가봐요...
리스트 뷰의 행을 클릭했을 때, 행의 개수만큼 getView가 호출되는건가요??
아 지금 검색해봤는데...
notifyDataSetChanged() 로 리스트뷰가 다시뿌려지는건가 보군요?!!
0 추천
저같은경우엔 커스텀 리스트뷰로 체크박스를 하나 더 만들어서? 했던기억이 나네요..
anci (19,950 포인트) 님이 2015년 7월 20일 답변
체크박스가 안이뻐서,, 이미지뷰로 체크 모양으로 하려고 하는데..흑흑
0 추천
arraylist 혹은 boolean[]으로 배열을 선언하여 해당 리스트의 상태값을 배열로 저장하면서,

라스트뷰를 클릭했을땐 해당 포지션의 상태를 배열의 값과 맞추시면 될거같습니다.

3번째 리스트를 체크시 나머지는 전부false, 3번째 리스트의 값을 true로 가지고 getview에서 체크하시면 되겠네요
적유 (1,760 포인트) 님이 2015년 7월 20일 답변
음...제가 잘못 알고 있는 건가요..
클릭 이벤트가 발생했을 때, 리스트 행의 개수만큼 getView가 호출되나요??

말씀대로 하면..
만약 1번째 행이 체크되어 있는 상태이고, 이상태에서
3번째 행을 클릭했을 때, 3번째 행에 대한 컨트롤은 가능하겠지만.. 1번째 행은 체크된 상태 그대로 일거 같은데..

제가 잘못알고 있는 걸수도 있으니, 오늘 저녁에 한번 해보도록 하겠습니다.^^
...