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 loadingDialog: LoadingDialog by lazy { LoadingDialog(requireActivity(), layoutInflater) }
private val liveAdapter = HomeLiveAdapter()
private val recentActivityCreatorAdapter = HomeRecentActivityCreatorAdapter { openCreatorProfile(it.creatorId) }
private val recentActivityCreatorAdapter = HomeRecentActivityCreatorAdapter()
private val recentDebutCreatorAdapter = HomeRecentDebutCreatorAdapter { openCreatorProfile(it.creatorId) }
private val firstAudioAdapter = HomeFirstAudioAdapter { openAudioContentDetail(it) }
private val aiCharacterAdapter = HomeAiCharacterAdapter { openCharacterDetail(it.characterId) }

View File

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

View File

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

View File

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

View File

@@ -81,15 +81,15 @@ class HomeLiveAdapter : RecyclerView.Adapter<HomeLiveAdapter.LiveViewHolder>() {
onClick: ((HomeRecommendationLiveUiModel) -> Unit)?
) {
val thumbnailItem = LiveThumbnailItem(
liveId = item.liveId,
creatorId = item.creatorId,
imageUrl = item.imageUrl.orEmpty(),
title = item.title,
liveId = item.roomId,
creatorId = item.roomId,
imageUrl = item.creatorProfileImage,
title = "",
creatorName = item.creatorNickname,
liveStartTimeText = item.beginDateTime.orEmpty()
liveStartTimeText = ""
)
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 File

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