스팀 앱 개발기 #74 - 태그 화면에서 포스트 리스트 추가 로딩시 깜빡임 문제 해결
시작하며...
지난 포스트에서 태그 화면의 포스트 리스트(RecyclerView로 구현)에 무한 스크롤을 구현하였습니다. 그런데 추가 로딩을 할 때마다 리스트가 깜빡이는 문제가 있었어요. 오늘은 이 문제를 해결해 보았습니다.
해결 방법
포스트 리스트를 보여줄 RecyclerView 뷰에 설정할 PostItemListAdapter 객체가 있죠. 그것의 setHasStableIds(true) 메소드를 호출하여 각 포스트 항목에 유일한 ID를 부여하도록 합니다. 이 유일한 ID 부여는 PostItemListAdapter 클래스의 getItemId 메소드를 구현하면 됩니다. 작업 내용은 아래 설명하겠습니다.
작업 개요
- TagsFragment 클래스에서 PostItemListAdapter 객체의 setHasStableIds(true) 호출
- PostItemListAdapter 클래스의 getItemId 메소드 구현
TagsFragment 클래스에서 PostItemListAdapter 객체의 setHasStableIds(true) 호출
onViewCreated 메소드에서 PostItemListAdapter 객체를 정의했었죠. 거기서 setHasStableIds(true) 호출했습니다. 그리고 깜빡임 문제 해결을 위해 작성해 보았던 SimpleItemAnimator 관련 코드는 삭제했습니다.
binding.listPostItem.apply {
adapter = PostItemListAdapter().apply {
setHasStableIds(true)
}
addOnScrollListener(rankedPostsScrollListener)
}
PostItemListAdapter 클래스의 getItemId 메소드 구현
getItemId 메소드가 리턴할 값은 포스트 항목의 유일한 값이어야 합니다. 여기에서는 단순히 포스트 리스트의 인덱스를 이용해도 무방할 것으로 판단했습니다. 이 메소드의 position 파라메터 값을 그대로 리턴하면 되는 거죠. 다만 파라메터, 리턴 값의 타입이 다르므로 Int 파라메터 값을 Long으로 변환해 주어야 합니다.
override fun getItemId(position: Int): Long {
return position.toLong()
}
GitHub Commit
- https://github.com/netrance/dorian-steem-apps/commit/86debf6fc06fcfd498551636bc8f09cdbcc003ac
- https://github.com/netrance/dorian-steem-apps/commit/ad36b6f1207ff2148c99b2857904cb8bd10e58ce
마치며...
이렇게 또 하나의 개발 포스팅을 마칩니다. 각 기능을 개발하면서 발견하는 버그들을 수정하는 과정 또한 오늘처럼 정리해 두는 것도 의미가 있지 않을까 생각합니다.
태그 화면 관련 남은 작업은 다음과 같습니다.
- 로딩 중 UI 보여주기
- 기타 개선
지난 스팀 앱 개발기
- #73 - 태그 화면의 포스트 리스트에 무한 스크롤 적용
- #72 - 태그 화면의 포스트 리스트에서 항목들 사이 분리선 보이기
- #71 - 태그 화면에서 포스트 항목들의 썸네일 로딩
- #70 - 태그 화면 1차 구현
- #69 - 태그 화면에 데이터 바인딩 적용
- #68 - 태그 화면(TagsFragment) 구성
- #67 - TagsViewModel 클래스에 포스트 리스트 구하는 메소드 그리고 라이브 데이터 추가
- #66 - bridge.get_ranked_posts API 연동 구현: ReadRankedPostsUseCase 클래스 추가
- #65 - bridge.get_ranked_posts API 연동 구현: SteemRepository 인터페이스, SteemRepositoryImpl 클래스 수정
- #64 - bridge.get_ranked_posts API 연동 구현: SteemService 인터페이스에 메소드 추가
- #63 - bridge.get_ranked_posts API 관련 데이터 클래스 추가 수정
- #62 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 수정
- #61 - layout_post_item.xml 수정 후 예상치 못한 빌드 오류
- #60 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 정의
- #59 - 태그별 포스트 리스트를 구하기 위한 bridge.get_ranked_posts API
- #58 - 포스트 리스트를 구성할 항목의 레이아웃 (3) 데이터 클래스 정의 및 데이터 바인딩 적용
- #57 - 포스트 리스트를 구성할 항목의 레이아웃 (2)
- #56 - 포스트 리스트를 구성할 항목의 레이아웃
- #55 - .gitignore 파일 작성
- #54 - RxJava 관련 메모리 누수 방지 코드 작성
- #53 - 버그 수정: 인터넷 미연결시 API 실행하면 앱 강제 종료
- #52 - 인터넷 미연결시 API 실행하면 어떻게 될까?
- #51 - 파워다운 끝났으나 SP to power down 값이 0이 아닌 버그
- #1 ~ #50
Posted through the AVLE Dapp (https://avle.io)
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.