IT하는 참새
ListView 중첩출력 현상 본문
리스트뷰 같이 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 |