feat(home): 추천 UI 바인딩을 갱신한다

This commit is contained in:
2026-06-05 20:53:44 +09:00
parent 44457349aa
commit 8371dc7baf
7 changed files with 32 additions and 25 deletions

View File

@@ -50,7 +50,7 @@ class HomeMainFragment : BaseFragment<FragmentV2MainHomeBinding>(
private val homeRecommendationViewModel: HomeRecommendationViewModel by viewModel() private val homeRecommendationViewModel: HomeRecommendationViewModel by viewModel()
private val loadingDialog: LoadingDialog by lazy { LoadingDialog(requireActivity(), layoutInflater) } private val loadingDialog: LoadingDialog by lazy { LoadingDialog(requireActivity(), layoutInflater) }
private val liveAdapter = HomeLiveAdapter() private val liveAdapter = HomeLiveAdapter()
private val recentActivityCreatorAdapter = HomeRecentActivityCreatorAdapter { openCreatorProfile(it.creatorId) } private val recentActivityCreatorAdapter = HomeRecentActivityCreatorAdapter()
private val recentDebutCreatorAdapter = HomeRecentDebutCreatorAdapter { openCreatorProfile(it.creatorId) } private val recentDebutCreatorAdapter = HomeRecentDebutCreatorAdapter { openCreatorProfile(it.creatorId) }
private val firstAudioAdapter = HomeFirstAudioAdapter { openAudioContentDetail(it) } private val firstAudioAdapter = HomeFirstAudioAdapter { openAudioContentDetail(it) }
private val aiCharacterAdapter = HomeAiCharacterAdapter { openCharacterDetail(it.characterId) } private val aiCharacterAdapter = HomeAiCharacterAdapter { openCharacterDetail(it.characterId) }

View File

@@ -9,14 +9,13 @@ import kr.co.vividnext.sodalive.v2.widget.banner.BannerView
class HomeBannerBinder( class HomeBannerBinder(
private val bannerView: BannerView private val bannerView: BannerView
) { ) {
private var sourceItems: List<HomeRecommendationBannerUiModel> = emptyList()
private var onBannerClick: ((HomeRecommendationBannerUiModel) -> Unit)? = null private var onBannerClick: ((HomeRecommendationBannerUiModel) -> Unit)? = null
init { init {
bannerView.setOnBindBannerImage { imageView, item -> imageView.loadUrl(item.imageUrl) } bannerView.setOnBindBannerImage { imageView, item ->
bannerView.setOnBannerClickListener { bannerItem -> if (item.imageUrl.isBlank()) imageView.setImageDrawable(null) else imageView.loadUrl(item.imageUrl)
sourceItems.firstOrNull { it.bannerId == bannerItem.bannerId }?.let { onBannerClick?.invoke(it) }
} }
bannerView.setOnBannerClickListener { item -> onBannerClick?.invoke(item.toHomeBannerUiModel()) }
} }
fun setOnBannerClick(listener: ((HomeRecommendationBannerUiModel) -> Unit)?) { fun setOnBannerClick(listener: ((HomeRecommendationBannerUiModel) -> Unit)?) {
@@ -24,14 +23,22 @@ class HomeBannerBinder(
} }
fun bind(section: HomeRecommendationBannerSection) { fun bind(section: HomeRecommendationBannerSection) {
sourceItems = section.items bannerView.setItems(section.items.map { it.toBannerItem() })
bannerView.setItems(
section.items.map { item ->
BannerItem(
bannerId = item.bannerId,
imageUrl = item.imageUrl.orEmpty()
)
} }
private fun HomeRecommendationBannerUiModel.toBannerItem(): BannerItem = BannerItem(
imageUrl = imageUrl,
eventItem = eventItem,
creatorId = creatorId,
seriesId = seriesId,
link = link
)
private fun BannerItem.toHomeBannerUiModel(): HomeRecommendationBannerUiModel = HomeRecommendationBannerUiModel(
imageUrl = imageUrl,
eventItem = eventItem,
creatorId = creatorId,
seriesId = seriesId,
link = link
) )
}
} }

View File

@@ -112,7 +112,7 @@ class HomeCheerCreatorAdapter(
} }
} }
profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply { profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply {
if (creator.profileImage == null) { if (creator.profileImage.isBlank()) {
setImageDrawable(null) setImageDrawable(null)
} else { } else {
loadUrl(creator.profileImage) loadUrl(creator.profileImage)

View File

@@ -77,7 +77,7 @@ class HomeFirstAudioAdapter(
imageView: ImageView, imageView: ImageView,
imageUrl: String? imageUrl: String?
) { ) {
if (imageUrl == null) { if (imageUrl.isNullOrBlank()) {
imageView.setImageDrawable(null) imageView.setImageDrawable(null)
} else { } else {
imageView.loadUrl(imageUrl) imageView.loadUrl(imageUrl)

View File

@@ -110,7 +110,7 @@ class HomeGenreCreatorAdapter(
} }
} }
profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply { profileView.findViewById<ImageView>(R.id.iv_home_genre_creator_profile).apply {
if (creator.profileImage == null) { if (creator.profileImage.isBlank()) {
setImageDrawable(null) setImageDrawable(null)
} else { } else {
loadUrl(creator.profileImage) loadUrl(creator.profileImage)

View File

@@ -81,15 +81,15 @@ class HomeLiveAdapter : RecyclerView.Adapter<HomeLiveAdapter.LiveViewHolder>() {
onClick: ((HomeRecommendationLiveUiModel) -> Unit)? onClick: ((HomeRecommendationLiveUiModel) -> Unit)?
) { ) {
val thumbnailItem = LiveThumbnailItem( val thumbnailItem = LiveThumbnailItem(
liveId = item.liveId, liveId = item.roomId,
creatorId = item.creatorId, creatorId = item.roomId,
imageUrl = item.imageUrl.orEmpty(), imageUrl = item.creatorProfileImage,
title = item.title, title = "",
creatorName = item.creatorNickname, creatorName = item.creatorNickname,
liveStartTimeText = item.beginDateTime.orEmpty() liveStartTimeText = ""
) )
view.bind(thumbnailItem) view.bind(thumbnailItem)
view.imageView().loadUrl(item.imageUrl) view.imageView().loadUrl(item.creatorProfileImage)
view.setOnLiveThumbnailClick(if (onClick == null) null else { _: LiveThumbnailItem -> onClick.invoke(item) }) view.setOnLiveThumbnailClick(if (onClick == null) null else { _: LiveThumbnailItem -> onClick.invoke(item) })
} }
} }

View File

@@ -49,8 +49,8 @@ class HomeRecentActivityCreatorAdapter(
} ?: run { } ?: run {
activityTypeText.visibility = View.GONE activityTypeText.visibility = View.GONE
} }
titleText.text = item.activityAt.orEmpty() titleText.text = item.activityAt
titleText.visibility = if (item.activityAt.isNullOrBlank()) View.GONE else View.VISIBLE titleText.visibility = if (item.activityAt.isBlank()) View.GONE else View.VISIBLE
nicknameText.text = item.nickname nicknameText.text = item.nickname
itemView.setOnClickListener { onClickItem(item) } itemView.setOnClickListener { onClickItem(item) }
} }