Skip to content

Commit

Permalink
[mod] #5 HomeFragment ListAdapter로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
YuBeen-Park committed Dec 26, 2022
1 parent f39ae60 commit e1c0d52
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ package org.sopt.sample.presentation.home
import android.os.Bundle
import android.view.View
import org.sopt.sample.R
import org.sopt.sample.adapter.RepoAdapter
import org.sopt.sample.base.BindingFragment
import org.sopt.sample.data.Repo
import org.sopt.sample.databinding.FragmentGalleryBinding
import org.sopt.sample.presentation.home.adapter.GalleryAdapter


class GalleryFragment : BindingFragment<FragmentGalleryBinding>(R.layout.fragment_gallery) {
Expand Down Expand Up @@ -68,7 +68,7 @@ class GalleryFragment : BindingFragment<FragmentGalleryBinding>(R.layout.fragmen
}

private fun initLayout() {
val adapter = RepoAdapter(requireContext())
val adapter = GalleryAdapter(requireContext())
binding.rvRepos.adapter = adapter
adapter.setRepoList(mockRepoList)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import dagger.hilt.android.AndroidEntryPoint
import org.sopt.sample.R
import org.sopt.sample.adapter.GalleryAdapter
import org.sopt.sample.adapter.RepoAdapter
import org.sopt.sample.base.BindingFragment
import org.sopt.sample.databinding.FragmentHomeBinding
import org.sopt.sample.util.showSnackbar
Expand All @@ -17,7 +16,7 @@ class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home

private val viewModel by viewModels<HomeViewModel>()

private lateinit var galleryAdapter: GalleryAdapter
private lateinit var galleryAdapter: RepoAdapter
private lateinit var dialog: LoadingDialog

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Expand All @@ -28,7 +27,7 @@ class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home

private fun initLayout() {
val gridManager = GridLayoutManager(requireContext(), SPAN_COUNT)
galleryAdapter = GalleryAdapter()
galleryAdapter = RepoAdapter()
binding.rvGallery.apply {
layoutManager = gridManager
adapter = galleryAdapter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.sample.adapter
package org.sopt.sample.presentation.home.adapter

import android.content.Context
import android.view.LayoutInflater
Expand All @@ -8,11 +8,11 @@ import org.sopt.sample.data.Repo
import org.sopt.sample.databinding.LayoutGithubRepoBinding
import org.sopt.sample.databinding.LayoutRecyclerTextBinding

class RepoAdapter(context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
class GalleryAdapter(context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val inflater by lazy { LayoutInflater.from(context) }
private var repoList: List<Repo> = emptyList()

class RepoViewHolder(
class GalleryViewHolder(
private val binding: LayoutGithubRepoBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun onRepoBind(data: Repo) {
Expand Down Expand Up @@ -40,7 +40,7 @@ class RepoAdapter(context: Context) : RecyclerView.Adapter<RecyclerView.ViewHold
}
Repo.REPO_TYPE -> {
val binding = LayoutGithubRepoBinding.inflate(inflater, parent, false)
RepoViewHolder(binding)
GalleryViewHolder(binding)
}
else -> {
throw ClassCastException("Unknown viewType Error")
Expand All @@ -55,7 +55,7 @@ class RepoAdapter(context: Context) : RecyclerView.Adapter<RecyclerView.ViewHold
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (repoList[position].type) {
Repo.REPO_TYPE -> {
(holder as RepoViewHolder).onRepoBind(repoList[position])
(holder as GalleryViewHolder).onRepoBind(repoList[position])
}
Repo.TEXT_TYPE -> {
(holder as TextViewHolder).onTextBind(repoList[position])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,28 @@ package org.sopt.sample.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import coil.load
import coil.transform.CircleCropTransformation
import org.sopt.sample.R
import org.sopt.sample.data.remote.response.ResponseUser
import org.sopt.sample.databinding.LayoutGalleryRowBinding
import org.sopt.sample.presentation.home.adapter.GalleryAdapter

class GalleryAdapter : RecyclerView.Adapter<GalleryAdapter.GalleryViewHolder>() {
private var userItems: List<ResponseUser.UserListInfo>? = emptyList()

class RepoAdapter : ListAdapter<ResponseUser.UserListInfo, RepoAdapter.RepoViewHolder>(
FollowerDiffCallback
) {
private var userItems: List<ResponseUser.UserListInfo> = emptyList()

fun setItems(items: List<ResponseUser.UserListInfo>) {
this.userItems = items
notifyDataSetChanged()
submitList(items)
}

class GalleryViewHolder(
class RepoViewHolder(
private val binding: LayoutGalleryRowBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(user: ResponseUser.UserListInfo) {
Expand All @@ -30,17 +36,32 @@ class GalleryAdapter : RecyclerView.Adapter<GalleryAdapter.GalleryViewHolder>()
}
}

override fun getItemCount() = userItems?.size ?: 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RepoAdapter.RepoViewHolder {
val binding =
LayoutGalleryRowBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return RepoAdapter.RepoViewHolder(binding)
}

override fun onBindViewHolder(holder: GalleryViewHolder, position: Int) {
userItems?.let {
override fun onBindViewHolder(holder: RepoAdapter.RepoViewHolder, position: Int) {
userItems.let {
holder.bind(it[position])
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GalleryViewHolder {
val binding =
LayoutGalleryRowBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return GalleryViewHolder(binding)
}

object FollowerDiffCallback : DiffUtil.ItemCallback<ResponseUser.UserListInfo>() {
override fun areItemsTheSame(
oldItem: ResponseUser.UserListInfo,
newItem: ResponseUser.UserListInfo
): Boolean {
return oldItem.id == newItem.id
}

override fun areContentsTheSame(
oldItem: ResponseUser.UserListInfo,
newItem: ResponseUser.UserListInfo
): Boolean {
return oldItem == newItem
}
}
}

0 comments on commit e1c0d52

Please sign in to comment.