본문 바로가기

앱 개발/Kotlin_Android

ListAdapter

 ListAdapter는 DiffUtil을 사용하여 새로운 데이터 세트와 이전 데이터 세트의 차이를 계산하여 RecyclerView가 효율적으로 갱신되고 성능이 향상된다. RecyclerView Adapter를 직접 구현하는 것보다 더 간단하게 RecyclerView를 구현할 수 있다. 데이터가 변경될 때마다 ListAdapter는 내부적으로 자동으로 DiffUtil.Callback을 구현하므로 효율적인 UI 업데이트를 제공한다. 따라서 데이터 변경을 처리하는 데 있어서 많은 편의성을 제공한다.

 ListAdapter는 ViewHolder를 재사용하기 위하여 내부적으로 구현된 onBindViewHolder() 메서드를 제공한다. 항목의 위치를 인수로 받아서 해당 항목의 데이터만을 업데이트하므로 전체 목록을 다시 그리는 것보다 훨씬 효율적이다. 반면 RecyclerView Adapter는 일반적인 onBindViewHolder() 메서드를 사용하여 모든 데이터 항목을 다시 그리기 때문에 더 많은 리소스가 소모될 수 있다.

 

 ListAdapter는 RecyclerView가 효율적으로 리사이클러 뷰의 데이터를 업데이트할 수 있도록 해주는 특수한 RecyclerAdapter이다.

 

< 사용 예 >

class FavoriteListAdapter :
    RecyclerView.Adapter<FavoriteListAdapter.FavoriteUserViewHolder>() {
    var gitHubUserList = listOf<GitHubUserEntity>()

    class FavoriteUserViewHolder(private val binding: ItemGithubUserBinding) :
        RecyclerView.ViewHolder(binding.root) {
        fun bind(gitHubUser: GitHubUserEntity) {
            with(binding) {
                switchFavorite.isChecked = gitHubUser.isFavorite
                tvUserName.text = gitHubUser.loginName
                imgUserAvatar.load(gitHubUser.avatarUrl)
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteUserViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_github_user, parent, false)
        return FavoriteUserViewHolder(ItemGithubUserBinding.bind(view))
    }

    override fun getItemCount(): Int {
        return gitHubUserList.size
    }

    override fun onBindViewHolder(holder: FavoriteUserViewHolder, position: Int) {
        val currentItem = gitHubUserList[position]
        holder.bind(currentItem)
    }
}

 

 

728x90

'앱 개발 > Kotlin_Android' 카테고리의 다른 글

SharedPreference  (0) 2024.05.13
Companion Object & Object  (0) 2024.05.13
MVP -> MVVM  (0) 2024.04.19
Data & Business Logic  (0) 2024.04.18
RecyclerView  (0) 2024.04.12