오늘도 더 나은 코드를 작성하였습니까?

UI에 페이징된 데이터 표시 본문

Android Jetpack Architecture/Paging3

UI에 페이징된 데이터 표시

hik14 2021. 8. 19. 15:48

Activity의 onCreate() /   fragment onViewCreated() 에서 최종적인 페이징된 반응형 데이터 스트림을 소비한다.

  1. PagingDataAdapter 클래스의 인스턴스를 만듭니다.
  2. 페이징된 데이터를 표시할 RecyclerView 목록에 PagingDataAdapter 인스턴스를 전달합니다.
  3. PagingData 스트림을 확인하고 생성된 각 값을 어댑터의 submitData() 메서드에 전달합니다
val viewModel by viewModels<ExampleViewModel>()

val pagingAdapter = UserAdapter(UserComparator)
val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
recyclerView.adapter = pagingAdapter

// Activities can use lifecycleScope directly, 
// but Fragments should instead use viewLifecycleOwner.lifecycleScope.
lifecycleScope.launch {
  viewModel.flow.collectLatest { pagingData ->
    pagingAdapter.submitData(pagingData)
  }
}

submitData() 메서드는 PagingSource가 무효화되거나 어댑터의 새로고침 메서드가 호출될 때까지 중단되며 반환하지 않습니다. 즉, submitData() 호출 이후의 코드가 의도한 것보다 훨씬 늦게 실행될 수 있기 때문에 사용자 편의를 고려하여 로딩및 대기 화면이 필요하다.