feat(home): 크리에이터 카드 클릭을 연결한다

This commit is contained in:
2026-06-05 16:01:23 +09:00
parent 7c0af85aaa
commit 7a4fa3c50f
4 changed files with 30 additions and 12 deletions

View File

@@ -12,7 +12,8 @@ import kr.co.vividnext.sodalive.extensions.loadUrl
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel
class HomeCheerCreatorAdapter( class HomeCheerCreatorAdapter(
private val onFollowAllClick: (List<Long>) -> Unit private val onFollowAllClick: (List<Long>) -> Unit,
private val onCreatorClick: (HomeRecommendationCreatorUiModel) -> Unit = {}
) : RecyclerView.Adapter<HomeCheerCreatorAdapter.CheerCreatorGroupViewHolder>() { ) : RecyclerView.Adapter<HomeCheerCreatorAdapter.CheerCreatorGroupViewHolder>() {
private var creators: List<HomeRecommendationCreatorUiModel> = emptyList() private var creators: List<HomeRecommendationCreatorUiModel> = emptyList()
private var isFollowCompleted: Boolean = false private var isFollowCompleted: Boolean = false
@@ -29,7 +30,7 @@ class HomeCheerCreatorAdapter(
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CheerCreatorGroupViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CheerCreatorGroupViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_cheer_creator_group, parent, false) val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_cheer_creator_group, parent, false)
view.layoutParams = cheerGroupLayoutParams(parent) view.layoutParams = cheerGroupLayoutParams(parent)
return CheerCreatorGroupViewHolder(view, parent, onFollowAllClick) return CheerCreatorGroupViewHolder(view, parent, onFollowAllClick, onCreatorClick)
} }
override fun onBindViewHolder(holder: CheerCreatorGroupViewHolder, position: Int) { override fun onBindViewHolder(holder: CheerCreatorGroupViewHolder, position: Int) {
@@ -41,7 +42,8 @@ class HomeCheerCreatorAdapter(
class CheerCreatorGroupViewHolder( class CheerCreatorGroupViewHolder(
itemView: View, itemView: View,
private val parent: ViewGroup, private val parent: ViewGroup,
private val onFollowAllClick: (List<Long>) -> Unit private val onFollowAllClick: (List<Long>) -> Unit,
private val onCreatorClick: (HomeRecommendationCreatorUiModel) -> Unit
) : RecyclerView.ViewHolder(itemView) { ) : RecyclerView.ViewHolder(itemView) {
private val creatorGrid = itemView.findViewById<GridLayout>(R.id.gl_home_cheer_creator_profiles) private val creatorGrid = itemView.findViewById<GridLayout>(R.id.gl_home_cheer_creator_profiles)
private val followAllButton = itemView.findViewById<View>(R.id.view_home_cheer_group_follow_all) private val followAllButton = itemView.findViewById<View>(R.id.view_home_cheer_group_follow_all)
@@ -117,6 +119,7 @@ class HomeCheerCreatorAdapter(
} }
} }
profileView.findViewById<TextView>(R.id.tv_home_genre_creator_profile_nickname).text = creator.nickname profileView.findViewById<TextView>(R.id.tv_home_genre_creator_profile_nickname).text = creator.nickname
profileView.setOnClickListener { onCreatorClick(creator) }
creatorGrid.addView(profileView) creatorGrid.addView(profileView)
} }
} }

View File

@@ -13,7 +13,8 @@ import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiMo
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationGenreCreatorGroupUiModel import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationGenreCreatorGroupUiModel
class HomeGenreCreatorAdapter( class HomeGenreCreatorAdapter(
private val onFollowAllClick: (List<Long>) -> Unit private val onFollowAllClick: (List<Long>) -> Unit,
private val onCreatorClick: (HomeRecommendationCreatorUiModel) -> Unit = {}
) : RecyclerView.Adapter<HomeGenreCreatorAdapter.GenreCreatorGroupViewHolder>() { ) : RecyclerView.Adapter<HomeGenreCreatorAdapter.GenreCreatorGroupViewHolder>() {
private var groups: List<HomeRecommendationGenreCreatorGroupUiModel> = emptyList() private var groups: List<HomeRecommendationGenreCreatorGroupUiModel> = emptyList()
@@ -25,7 +26,7 @@ class HomeGenreCreatorAdapter(
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GenreCreatorGroupViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GenreCreatorGroupViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_genre_creator_group, parent, false) val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_genre_creator_group, parent, false)
view.layoutParams = genreGroupLayoutParams(parent) view.layoutParams = genreGroupLayoutParams(parent)
return GenreCreatorGroupViewHolder(view, parent, onFollowAllClick) return GenreCreatorGroupViewHolder(view, parent, onFollowAllClick, onCreatorClick)
} }
override fun onBindViewHolder(holder: GenreCreatorGroupViewHolder, position: Int) { override fun onBindViewHolder(holder: GenreCreatorGroupViewHolder, position: Int) {
@@ -37,7 +38,8 @@ class HomeGenreCreatorAdapter(
class GenreCreatorGroupViewHolder( class GenreCreatorGroupViewHolder(
itemView: View, itemView: View,
private val parent: ViewGroup, private val parent: ViewGroup,
private val onFollowAllClick: (List<Long>) -> Unit private val onFollowAllClick: (List<Long>) -> Unit,
private val onCreatorClick: (HomeRecommendationCreatorUiModel) -> Unit
) : RecyclerView.ViewHolder(itemView) { ) : RecyclerView.ViewHolder(itemView) {
private val genreText = itemView.findViewById<TextView>(R.id.tv_home_genre_creator_group_title_genre) private val genreText = itemView.findViewById<TextView>(R.id.tv_home_genre_creator_group_title_genre)
private val creatorGrid = itemView.findViewById<GridLayout>(R.id.gl_home_genre_creator_profiles) private val creatorGrid = itemView.findViewById<GridLayout>(R.id.gl_home_genre_creator_profiles)
@@ -115,6 +117,7 @@ class HomeGenreCreatorAdapter(
} }
} }
profileView.findViewById<TextView>(R.id.tv_home_genre_creator_profile_nickname).text = creator.nickname profileView.findViewById<TextView>(R.id.tv_home_genre_creator_profile_nickname).text = creator.nickname
profileView.setOnClickListener { onCreatorClick(creator) }
creatorGrid.addView(profileView) creatorGrid.addView(profileView)
} }
} }

View File

@@ -10,7 +10,9 @@ import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.extensions.loadUrl import kr.co.vividnext.sodalive.extensions.loadUrl
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentlyActiveCreatorUiModel import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentlyActiveCreatorUiModel
class HomeRecentActivityCreatorAdapter : RecyclerView.Adapter<HomeRecentActivityCreatorAdapter.CreatorViewHolder>() { class HomeRecentActivityCreatorAdapter(
private val onClickItem: (HomeRecommendationRecentlyActiveCreatorUiModel) -> Unit = {}
) : RecyclerView.Adapter<HomeRecentActivityCreatorAdapter.CreatorViewHolder>() {
private var items: List<HomeRecommendationRecentlyActiveCreatorUiModel> = emptyList() private var items: List<HomeRecommendationRecentlyActiveCreatorUiModel> = emptyList()
fun submitItems(items: List<HomeRecommendationRecentlyActiveCreatorUiModel>) { fun submitItems(items: List<HomeRecommendationRecentlyActiveCreatorUiModel>) {
@@ -21,7 +23,7 @@ class HomeRecentActivityCreatorAdapter : RecyclerView.Adapter<HomeRecentActivity
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_activity_creator, parent, false) val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_activity_creator, parent, false)
view.layoutParams = recyclerItemLayoutParams(parent) view.layoutParams = recyclerItemLayoutParams(parent)
return CreatorViewHolder(view) return CreatorViewHolder(view, onClickItem)
} }
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) { override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
@@ -30,7 +32,10 @@ class HomeRecentActivityCreatorAdapter : RecyclerView.Adapter<HomeRecentActivity
override fun getItemCount(): Int = items.size override fun getItemCount(): Int = items.size
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { class CreatorViewHolder(
itemView: View,
private val onClickItem: (HomeRecommendationRecentlyActiveCreatorUiModel) -> Unit
) : RecyclerView.ViewHolder(itemView) {
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_activity_creator_profile) private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_activity_creator_profile)
private val activityTypeText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_type) private val activityTypeText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_type)
private val titleText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_title) private val titleText = itemView.findViewById<TextView>(R.id.tv_home_recent_activity_title)
@@ -47,6 +52,7 @@ class HomeRecentActivityCreatorAdapter : RecyclerView.Adapter<HomeRecentActivity
titleText.text = item.activityAt.orEmpty() titleText.text = item.activityAt.orEmpty()
titleText.visibility = if (item.activityAt.isNullOrBlank()) View.GONE else View.VISIBLE titleText.visibility = if (item.activityAt.isNullOrBlank()) View.GONE else View.VISIBLE
nicknameText.text = item.nickname nicknameText.text = item.nickname
itemView.setOnClickListener { onClickItem(item) }
} }
} }
} }

View File

@@ -10,7 +10,9 @@ import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.extensions.loadUrl import kr.co.vividnext.sodalive.extensions.loadUrl
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel
class HomeRecentDebutCreatorAdapter : RecyclerView.Adapter<HomeRecentDebutCreatorAdapter.CreatorViewHolder>() { class HomeRecentDebutCreatorAdapter(
private val onClickItem: (HomeRecommendationCreatorUiModel) -> Unit = {}
) : RecyclerView.Adapter<HomeRecentDebutCreatorAdapter.CreatorViewHolder>() {
private var items: List<HomeRecommendationCreatorUiModel> = emptyList() private var items: List<HomeRecommendationCreatorUiModel> = emptyList()
fun submitItems(items: List<HomeRecommendationCreatorUiModel>) { fun submitItems(items: List<HomeRecommendationCreatorUiModel>) {
@@ -21,7 +23,7 @@ class HomeRecentDebutCreatorAdapter : RecyclerView.Adapter<HomeRecentDebutCreato
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreatorViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_debut_creator, parent, false) val view = LayoutInflater.from(parent.context).inflate(R.layout.item_home_recent_debut_creator, parent, false)
view.layoutParams = recentDebutItemLayoutParams(parent) view.layoutParams = recentDebutItemLayoutParams(parent)
return CreatorViewHolder(view) return CreatorViewHolder(view, onClickItem)
} }
override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) { override fun onBindViewHolder(holder: CreatorViewHolder, position: Int) {
@@ -30,13 +32,17 @@ class HomeRecentDebutCreatorAdapter : RecyclerView.Adapter<HomeRecentDebutCreato
override fun getItemCount(): Int = items.size override fun getItemCount(): Int = items.size
class CreatorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { class CreatorViewHolder(
itemView: View,
private val onClickItem: (HomeRecommendationCreatorUiModel) -> Unit
) : RecyclerView.ViewHolder(itemView) {
private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_debut_creator_profile) private val profileImage = itemView.findViewById<ImageView>(R.id.iv_home_recent_debut_creator_profile)
private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_recent_debut_creator_nickname) private val nicknameText = itemView.findViewById<TextView>(R.id.tv_home_recent_debut_creator_nickname)
fun bind(item: HomeRecommendationCreatorUiModel) { fun bind(item: HomeRecommendationCreatorUiModel) {
profileImage.loadUrl(item.profileImage) profileImage.loadUrl(item.profileImage)
nicknameText.text = item.nickname nicknameText.text = item.nickname
itemView.setOnClickListener { onClickItem(item) }
} }
} }