스팀 앱 개발기 #74 - 태그 화면에서 포스트 리스트 추가 로딩시 깜빡임 문제 해결steemCreated with Sketch.

시작하며...

지난 포스트에서 태그 화면의 포스트 리스트(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


마치며...

이렇게 또 하나의 개발 포스팅을 마칩니다. 각 기능을 개발하면서 발견하는 버그들을 수정하는 과정 또한 오늘처럼 정리해 두는 것도 의미가 있지 않을까 생각합니다.

태그 화면 관련 남은 작업은 다음과 같습니다.

  • 로딩 중 UI 보여주기
  • 기타 개선

지난 스팀 앱 개발기

Sort:  
 last year 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.032
BTC 63822.89
ETH 3083.13
USDT 1.00
SBD 3.99