IT하는 참새

ListView 중첩출력 현상 본문

프로그래밍/Android Tip

ListView 중첩출력 현상

pshot 2018. 8. 29. 00:04

리스트뷰 같이 Adapter를 이용해서 사용하는 뷰들은


'뷰를 재활용하는 방식' 이다


ListView에서 이미나온 뷰가 또 나온다? 

 

 - 이러면 뷰 재활용하다가 문제생긴거임 


ViewHolder개념을 사용하면 해결가능

(RecyclerView는 이미 쓰고있음, 개인적으로 ListView보다 RecyclerView쓰는거 추천)


뭐 아무튼 ViewHolder개념을 어떻게 적용하냐



보통 CustomListView를 구현할것이고, Adpater를 만들텐데


getView메소드내에서 


if(view == null) {

//Inflater, 뷰생성 등등 

}


이런 코드를 가지고 있을것임


이거를 변형해서 사용할것임



1. 리스트뷰로 뿌려질 아이템들의 변수만 가지고있는 클래스를 만든다

(예를들어 제목, 사진 이 한줄에 보여지는 리스트뷰라면)


public class ListViewHolder {

public String title;

public ImageView image;

}


2. 이렇게 바꿔줌


public View getView(~~~) {


ListViewHolder holder;


if(view == null) {

// inflate작업하고 나서

holder = new ListViewHolder();


holder.title = (TextView)이 리스트뷰에 연결된 title ID값

holder.image = (ImageView)이 리스트뷰에 연결된 image ID값


view.setTag(holder);

} else {

holder = (ListViewHolder)view.getTag();

}

}


3. 이제 맨날 리스트뷰에 아이템값 지정할때처럼 id참조변수.메소드 이렇게 하지말고


holder.title.setText(~~);

holder.image.setImageResource(~~);


이런식으로 하면됨! (getView안에서 아이디값 찾는 그 짜증나는 행위 안할 수 있음)



이렇게하면 재활용문제 해결되고

리스트뷰가 중복되서 안나옴


'프로그래밍 > Android Tip' 카테고리의 다른 글

Tablayout의 탭 변경  (0) 2018.08.31
이미지 슬라이드 (쉽게구현)  (0) 2018.08.28