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

리스트뷰에 대한 질문좀여(어레이리스트를 비교??? 짜이뚱님...)

0 추천
커스텀리스트뷰를 구현했을때

구현 리스트는

(미이지.data.size에 따라서) (스트링.data.size에 따라서) (클릭이벤트 처리 부분)

 

이렇게 불러온 1개의 뷰를 여러개를 만들어 낼건데요

 

재사용 될 뷰에 대해서 이미사용 된 뷰는 고정 시키고

스크롤을 했을시 새로운뷰가 나오도록 설정 하고 싶은데 아래분께서 답변 해주신

내용중에서 이해한 부분이 아직 씁슬 합니다...

제가 이해력이 부족하네요 ㅠ.ㅠ

 

(data.size[0] 이미지) (data.size[0] 스트링) (ImageView) <- click시 이미지생김

(data.size[1] 이미지) (data.size[1] 스트링) (ImageView) <- click시 이미지생김

(data.size[2] 이미지) (data.size[2] 스트링) (ImageView) <- click시 이미지생김

(data.size[3] 이미지) (data.size[3] 스트링) (ImageView) <- click시 이미지생김

---- 여기서부터 0인덱스 뷰가 안보임 ----

(data.size[4] 이미지) (data.size[4] 스트링) (ImageView)

(data.size[5] 이미지) (data.size[5] 스트링) (ImageView)

(data.size[6] 이미지) (data.size[6] 스트링) (ImageView)

(data.size[7] 이미지) (data.size[7] 스트링) (ImageView)

 

이런식으로 뷰가 고정 되어져서 클릭시 정상적으로 이벤트가 발생 되게 하고 싶은데요.

 

이런 경우 getView메소드에서 어떻게 처리해야 할지 감이 안옵니다...

재사용 된 뷰에 대해서 '제거'를 해야지 옳은 것인지

아니면 재사용 된 뷰를 '고정' 시켜야 하는지.

저의 이해력좀 도와주세요 ㅠㅠ
이게뭐야d (1,040 포인트) 님이 2013년 3월 8일 질문
질문에서 원하시는 기능을 이해하기 어려운부분이 좀 있네요
그리고 코드를 올려주시면 더 자세한 답변이가능한데 아쉽습니다.

1개의 답변

0 추천

이전 답변에서도 말씀드렷듯이 --ㅋ 뷰자체를 컨트롤 하려하지말고 

데이터를 컨트롤한다는 개념으로 접근하셔야합니다.

원하시는 기능이 item클릭시 해당아이템의 맨오른쪽 ImageView에 이미지를 띄우고

이것이 스크롤되어서 뷰가 재사용되도 이미지가 보여지는 상태를 원하시는거라면

 

data에 ImageView의 뿌려질 이미지의 정보를 저장하는 변수를 하나만드시면 됩니다.

예를 들어 url을 통해서 이미지를 가져오시는것이라면 

 

data클래스에 imageUrl 변수를 하나만들고 

data입력시 imageUrl에 null을 먼저 넣습니다.

 

getView가 이런구조로 되어있다면

 

View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list, null);
}
temp = item.get(position);
 
if (temp != null) {
 
// List Item control
 
}
 
List item control 영역에서
if(temp.imageUrl != null){
             //이부분에 url를 가져와서 이미지뷰에 이미지를 보여주는 코드
}
 
imageUrl이 null이 아니라면 이미지뷰에 이미지를 설정합니다.
이렇게 해주면 이미지를 설정해준 뷰가 재사용되어도 설정했던 이미지를 똑같이 보여지게 됩니다.

 

 

아이템 클릭이 일어나면onItemClick 메서드에서 

첫번째 메개변수인 AdapterView와 세번째 메개변수인 position을 사용하여 해당 아이템의 데이터를 가져옵니다.

Data getData = (Data)adapterView.getItemAtPosition(position);

그리고 getData.imageUrl변수에 url값을 적용하여 주고 데이터 변경되었다고 알려줍니다(새로고침)

list.remove(position);

list.add(position, new Data(getData.이미지, getData.스트링, 보여줄imageUrl);

customAdapter.notifyDataSetChanged();

 

 

 

뷰 재사용부분은 강제로 재사용하지않게 고칠수는 없습니다.

뷰가 재사용되어도 원하는 출력이 보여줄수있도록 item들에 설정해주는 속성값들을 data로 컨트롤하여야합니다.

얼룩돼지 (15,720 포인트) 님이 2013년 3월 8일 답변
그리고 기존 질문들에서 도움이 된 답변들이 있다면 채택을 해주시고 재질문을 해주세요. 게시판활성화를 위해  추천, 비추천, 채택을 생활화 합시다!!
...