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

커스텀 어뎁터에 대해서 질문 할게 있습니다...

0 추천

CustomAdater adapter = new CustomAdater(this, R.layout.activity_stageon_item,
    R.id.list_item, stage10, intList);

 

커스텁 아이템이 이렇게 구성 되어 있다면요

R.layout.activity_stageon_item 은 아이템.xml 이고여

R.id.list_item 은 아이템에 있는 뷰이고여

stage10 은 sqlite변수 이고, intList은 이미지 값을 비교해서 가져온 Integer 값 입니다.

 

여기서 궁금한점이 리스트뷰를 구성 한다면 거기에 그림을 추가하고 있는 상황인데요

(이미지열) (리스트뷰열) (클릭이벤트로 가져올 이미지열)

 

을 구성 하고 싶은데요

public void onItemClick(AdapterView parent, View v, int position, long id)

이 메소드에서 포지션값이 있어서 클릭시 타 엑티비티로 인텐트는 확실히 됨을 확인 하였습니다.

그런데 정작 (클릭이벤트로 가져올 이미지열) 을 사용 하려면,

이미지를 클릭시 가져와 지기는 하는데

리스트뷰가 있다면

1(이미지)     (리스트뷰 인덱스)     (이미지 가져오기 성공)

2(이미지)     (리스트뷰 인덱스)    

3(이미지)     (리스트뷰 인덱스)

4(이미지)     (리스트뷰 인덱스)

5(이미지)     (리스트뷰 인덱스)

 

-------

 

1을 눌렀을때는 이미지를 가져오는데 2를 누르니까 2번 열어 이미지가 안불러와 져서 리스트뷰를 아래로 내려서 확인해 보니 6번이나 7번 열에 되어있는 상황이 있습니다.

포지션 값을 알고 있는 상황에서 이미지를 적용 시키거나

setVisibility 를 적용 할 수 있는 방법이 없을까요?

엑셈엘에 셋비지빌리지 적용하려고 인비지블 해서 해도 위와 같은 상황이 발생합니다.

포지션 값을 이녀석이 알고 있음에도 불구하고 왜 이런 현상이 일어나는지 디버그를 해도 못찾겠네요... 커스텁어뎁터에 대해서 조언 해주실분이 계신지...

 

public void onItemClick(AdapterView parent, View v, int position, long id)

v.setOnClickListener(new OnClickListener() {
    
    @Override
    public void onClick(View v) {
     if(v.getId() == R.id.list_item_ing1) {
      v.setVisibility(View.VISIBLE);
     }
     
    }
   });

 

을 추가 했는데.. . 디버그로 확인시 온클릭 메서드로 안넘어 가네요.

클릭이벤트도 안먹히고 이거 도대체 어떻게 해결해야 되나요... ㄷ;;

커스텁어텝터 클래스 에서 설정하면 모두 바뀌거나 넘어가지도 않고여..

 

이게뭐야d (1,040 포인트) 님이 2013년 3월 7일 질문

2개의 답변

0 추천
소스나 질문하신 내용이 이해가 잘 안되지만 adapter 쪽 문제가 아닐까 싶네요.
동기화인생 (3,640 포인트) 님이 2013년 3월 7일 답변
0 추천
가장 많이들 하시는 실수입니다.

원인은 뷰의 재사용때문입니다.

리스트뷰는 아이템갯수가 몇개이건간에 화면에 보여지는 아이템들만

하위뷰로 가지고 있습니다.

스크롤 하게 되면서 안보여지는 아이템들은 없어지고 보여지게되는 아이템들이 추가되는 형식입니다.

 

처음 접하시는분들이 가장많이 틀리시는 부분이

onItemClick메소드의 View객체를 가져와서 컨트롤 하시는데

그렇게 하시면 스크롤 이동하면서 뷰가 재사용될때 문제가 생깁니다.

틀린 방법입니다.

데이터를 가지고 있는 list객체에서 데이터를 컨트롤 하는 방법이 맞는 방법입니다.

intList가 무슨객체를 쓰셧는지는 모르겟지만

데이터에 setVisiblility속성을 바꿀수있는 int 변수를 추가하셔서

아답터의 getView부분과 onItemClick에서 컨트롤 해보세요.

 

이전에 비슷한 질문에 답변했던적이 있어서 링크 남깁니다. 참고하세요.

http://www.masterqna.com/android/146/android-visibility-%EB%AC%B8%EC%A0%9C-%EC%A7%88%EB%AC%B8%ED%95%A9%EB%8B%88%EB%8B%A4
얼룩돼지 (15,720 포인트) 님이 2013년 3월 7일 답변
얼룩돼지님이 2013년 3월 7일 수정
...