스팀 앱 개발기 #73 - 태그 화면의 포스트 리스트에 무한 스크롤 적용
시작하며...
현재 구현된 태그 화면에서 포스트 리스트는 1차로 20개의 포스트 항목들을 불러옵니다. 그러나 추가로 이들을 불러오는 무한 스크롤은 아직 구현되지 않았죠. 이것이 오늘 구현 대상입니다.
작업 개요
- RecyclerView.OnScrollListener 객체 정의 및 설정
- TagsViewModel 클래스의 appendRankedPosts 메소드 수정
RecyclerView.OnScrollListener 객체 정의 및 설정
TagsFragment의 RecyclerView가 맨 아래로 스크롤 되었을 때, 포스트들을 추가로 불러오는 작업을 구현했습니다.
private val rankedPostsScrollListener: RecyclerView.OnScrollListener = object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
binding.viewModel?.let {
if (!binding.listPostItem.canScrollVertically(1)) {
val tag =activityViewModel.currentTag.value ?: ""
it.appendRankedPosts(tag)
}
}
}
}
TagsViewModel 클래스의 appendRankedPosts 메소드 수정
추가로 불러온 포스트 리스트를 TagsViewModel 객체의 rankedPosts 라이브 데이터에 추가한다고 데이터 바인딩이 실행되지 않습니다. rankedPosts.value를 같은 값으로 다시 세팅해줘야 데이터 바인딩이 실행되어 RecyclerView가 업데이트 됩니다. 불러온 포스트 리스트를 처리하는 코드에 아래와 같이 1줄을 추가하였습니다.
subscribe { rankedPostItemList ->
if (rankedPostsValue.isNotEmpty()) {
rankedPosts.value?.addAll(rankedPostItemList)
rankedPosts.postValue(rankedPosts.value) // 추가한 코드
}
}
문제는...
스크롤은 잘 됩니다. 그런데요... 추가 포스트를 불러오고 RecyclerView를 업데이트할 때 깜빡임이 발생합니다. 작동은 잘 되지만, 눈으로 보기에 어색함이 있죠. 오늘은 시간이 없어서 작업을 더 하지는 못 하구요. 내일 이 문제를 해결하고자 합니다.
GitHub Commit
마치며...
개발을 하다 보면, 위 문제와 같이 생각하지 못한 이슈가 나오기도 합니다. 이런 시행착오는 미리 겪어보는 것이 실무에서 삽질을 예방하는 것이 아닌가 생각해 봅니다.
지난 스팀 앱 개발기
- #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 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.