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.databinding.FragmentSeriesMainByGenreBinding
import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.home.HomeSeriesAdapter
import org.koin.android.ext.android.inject
import kotlin.math.roundToInt
@@ -25,7 +26,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
private val viewModel: SeriesMainByGenreViewModel by inject()
private lateinit var loadingDialog: LoadingDialog
private lateinit var seriesAdapter: SeriesListAdapter
private lateinit var seriesAdapter: HomeSeriesAdapter
private lateinit var genreAdapter: GenreAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -89,7 +90,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
}
private fun setupSeriesView() {
seriesAdapter = SeriesListAdapter(
seriesAdapter = HomeSeriesAdapter(
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
onClickItem = {
startActivity(
@@ -100,9 +101,7 @@ class SeriesMainByGenreFragment : BaseFragment<FragmentSeriesMainByGenreBinding>
putExtra(Constants.EXTRA_SERIES_ID, it)
}
)
},
onClickCreator = {},
isVisibleCreator = false
}
)
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.extensions.dpToPx
import kr.co.vividnext.sodalive.home.DayOfWeekAdapter
import kr.co.vividnext.sodalive.home.HomeSeriesAdapter
import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek
import org.koin.android.ext.android.inject
import java.util.Calendar
@@ -28,7 +29,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
private val viewModel: SeriesMainDayOfWeekViewModel by inject()
private lateinit var loadingDialog: LoadingDialog
private lateinit var adapter: SeriesListAdapter
private lateinit var adapter: HomeSeriesAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@@ -107,7 +108,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
}
private fun setupSeriesView() {
adapter = SeriesListAdapter(
adapter = HomeSeriesAdapter(
itemWidth = ((screenWidth - 24f.dpToPx() * 2 - 16f.dpToPx()) / 2f).roundToInt(),
onClickItem = {
startActivity(
@@ -118,9 +119,7 @@ class SeriesMainDayOfWeekFragment : BaseFragment<FragmentSeriesMainDayOfWeekBind
putExtra(Constants.EXTRA_SERIES_ID, it)
}
)
},
onClickCreator = {},
isVisibleCreator = false
}
)
val spanCount = 2

View File

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

View File

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