feat(series-main): 추천시리즈, 요일별 시리즈 동일한 레이아웃을 사용하여 아이템 크기와 내용이 동일하게 표시되도록 수정

This commit is contained in:
2025-11-17 21:32:03 +09:00
parent b759e110f8
commit cd8d2c255c
4 changed files with 29 additions and 33 deletions

View File

@@ -16,6 +16,7 @@ import kr.co.vividnext.sodalive.common.GridSpacingItemDecoration
import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainByGenreBinding import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainByGenreBinding
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.home.HomeSeriesAdapter
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import kotlin.math.roundToInt import kotlin.math.roundToInt
@@ -25,7 +26,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
private val viewModel: SeriesMainByGenreViewModel by inject() private val viewModel: SeriesMainByGenreViewModel by inject()
private lateinit var loadingDialog: LoadingDialog private lateinit var loadingDialog: LoadingDialog
private lateinit var seriesAdapter: SeriesListAdapter private lateinit var seriesAdapter: HomeSeriesAdapter
private lateinit var genreAdapter: GenreAdapter private lateinit var genreAdapter: GenreAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -89,7 +90,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
} }
private fun setupSeriesView() { private fun setupSeriesView() {
seriesAdapter = SeriesListAdapter( seriesAdapter = HomeSeriesAdapter(
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(), itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
onClickItem = { onClickItem = {
startActivity( startActivity(
@@ -100,9 +101,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
putExtra(Constants.EXTRA_SERIES_ID, it) putExtra(Constants.EXTRA_SERIES_ID, it)
} }
) )
}, }
onClickCreator = {},
isVisibleCreator = false
) )
val spanCount = 2 val spanCount = 2

View File

@@ -17,6 +17,7 @@ import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainDayOfWeekBinding import kr.co.vividnext.sodalive.databinding.FragmentSeriesMainDayOfWeekBinding
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.home.DayOfWeekAdapter import kr.co.vividnext.sodalive.home.DayOfWeekAdapter
import kr.co.vividnext.sodalive.home.HomeSeriesAdapter
import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import java.util.Calendar import java.util.Calendar
@@ -28,7 +29,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
private val viewModel: SeriesMainDayOfWeekViewModel by inject() private val viewModel: SeriesMainDayOfWeekViewModel by inject()
private lateinit var loadingDialog: LoadingDialog private lateinit var loadingDialog: LoadingDialog
private lateinit var adapter: SeriesListAdapter private lateinit var adapter: HomeSeriesAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@@ -107,7 +108,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
} }
private fun setupSeriesView() { private fun setupSeriesView() {
adapter = SeriesListAdapter( adapter = HomeSeriesAdapter(
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(), itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
onClickItem = { onClickItem = {
startActivity( startActivity(
@@ -118,9 +119,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
putExtra(Constants.EXTRA_SERIES_ID, it) putExtra(Constants.EXTRA_SERIES_ID, it)
} }
) )
}, }
onClickCreator = {},
isVisibleCreator = false
) )
val spanCount = 2 val spanCount = 2

View File

@@ -6,7 +6,9 @@ import android.os.Bundle
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.Toast import android.widget.Toast
import androidx.annotation.OptIn
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.media3.common.util.UnstableApi
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@@ -14,7 +16,6 @@ import com.zhpan.bannerview.BaseBannerAdapter
import com.zhpan.indicator.enums.IndicatorSlideMode import com.zhpan.indicator.enums.IndicatorSlideMode
import com.zhpan.indicator.enums.IndicatorStyle import com.zhpan.indicator.enums.IndicatorStyle
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.series.SeriesListAdapter
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
@@ -37,7 +38,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
private lateinit var bannerAdapter: SeriesBannerAdapter private lateinit var bannerAdapter: SeriesBannerAdapter
private lateinit var completedAdapter: HomeSeriesAdapter private lateinit var completedAdapter: HomeSeriesAdapter
private lateinit var recommendAdapter: SeriesListAdapter private lateinit var recommendAdapter: HomeSeriesAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@@ -115,6 +116,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
} }
} }
@OptIn(UnstableApi::class)
private fun setupCompletedSeriesView() { private fun setupCompletedSeriesView() {
completedAdapter = HomeSeriesAdapter { completedAdapter = HomeSeriesAdapter {
if (SharedPreferenceManager.token.isNotBlank()) { if (SharedPreferenceManager.token.isNotBlank()) {
@@ -175,7 +177,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
} }
private fun setupRecommendSeriesView() { private fun setupRecommendSeriesView() {
recommendAdapter = SeriesListAdapter( recommendAdapter = HomeSeriesAdapter(
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(), itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
onClickItem = { onClickItem = {
startActivity( startActivity(
@@ -186,9 +188,7 @@ class SeriesMainHomeFragment : BaseFragment<FragmentSeriesMainHomeBinding>(
putExtra(Constants.EXTRA_SERIES_ID, it) putExtra(Constants.EXTRA_SERIES_ID, it)
} }
) )
}, }
onClickCreator = {},
isVisibleCreator = false
) )
val spanCount = 2 val spanCount = 2

View File

@@ -1,41 +1,40 @@
package kr.co.vividnext.sodalive.home package kr.co.vividnext.sodalive.home
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import coil.load
import com.bumptech.glide.load.resource.bitmap.CenterCrop import coil.transform.RoundedCornersTransformation
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import kr.co.vividnext.sodalive.R
import com.bumptech.glide.request.RequestOptions
import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
import kr.co.vividnext.sodalive.databinding.ItemHomeSeriesBinding import kr.co.vividnext.sodalive.databinding.ItemHomeSeriesBinding
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
class HomeSeriesAdapter( class HomeSeriesAdapter(
private val itemWidth: Int? = null,
private val onClickItem: (Long) -> Unit private val onClickItem: (Long) -> Unit
) : RecyclerView.Adapter<HomeSeriesAdapter.ViewHolder>() { ) : RecyclerView.Adapter<HomeSeriesAdapter.ViewHolder>() {
val items = mutableListOf<GetSeriesListResponse.SeriesListItem>() val items = mutableListOf<GetSeriesListResponse.SeriesListItem>()
inner class ViewHolder( inner class ViewHolder(
private val context: Context,
private val binding: ItemHomeSeriesBinding private val binding: ItemHomeSeriesBinding
) : RecyclerView.ViewHolder(binding.root) { ) : RecyclerView.ViewHolder(binding.root) {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
fun bind(item: GetSeriesListResponse.SeriesListItem) { fun bind(item: GetSeriesListResponse.SeriesListItem) {
Glide binding.ivCover.load(item.coverImage) {
.with(context) placeholder(R.drawable.bg_placeholder)
.load(item.coverImage) transformations(RoundedCornersTransformation(16f.dpToPx()))
.apply(
RequestOptions().transform( if (itemWidth != null) {
CenterCrop(), val lp = binding.ivCover.layoutParams
RoundedCorners(16f.dpToPx().toInt()) lp.width = itemWidth
) lp.height = itemWidth * 432 / 306
) binding.ivCover.layoutParams = lp
.into(binding.ivCover) }
}
binding.tvTitle.text = item.title binding.tvTitle.text = item.title
binding.tvNickname.text = item.creator.nickname binding.tvNickname.text = item.creator.nickname
@@ -63,7 +62,6 @@ class HomeSeriesAdapter(
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
parent.context,
ItemHomeSeriesBinding.inflate( ItemHomeSeriesBinding.inflate(
LayoutInflater.from(parent.context), LayoutInflater.from(parent.context),
parent, parent,