재생목록 상세

- 콘텐츠 리스트 표시
This commit is contained in:
klaus 2024-12-04 11:45:27 +09:00
parent 848f0b44f6
commit d9e39f88a8
4 changed files with 146 additions and 89 deletions

View File

@ -15,7 +15,7 @@ class AudioContentPlaylistListAdapter(
private val onClickItem: (Long) -> Unit private val onClickItem: (Long) -> Unit
) : RecyclerView.Adapter<AudioContentPlaylistListAdapter.ViewHolder>() { ) : RecyclerView.Adapter<AudioContentPlaylistListAdapter.ViewHolder>() {
val items = mutableListOf<GetPlaylistsItem>() private val items = mutableListOf<GetPlaylistsItem>()
inner class ViewHolder( inner class ViewHolder(
private val binding: ItemPlaylistListBinding private val binding: ItemPlaylistListBinding

View File

@ -1,16 +1,19 @@
package kr.co.vividnext.sodalive.audio_content.playlist.detail package kr.co.vividnext.sodalive.audio_content.playlist.detail
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.graphics.Rect
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.Toast import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.load import coil.load
import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.databinding.ActivityAudioContentPlaylistDetailBinding import kr.co.vividnext.sodalive.databinding.ActivityAudioContentPlaylistDetailBinding
import kr.co.vividnext.sodalive.extensions.dpToPx
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
class AudioContentPlaylistDetailActivity : BaseActivity<ActivityAudioContentPlaylistDetailBinding>( class AudioContentPlaylistDetailActivity : BaseActivity<ActivityAudioContentPlaylistDetailBinding>(
@ -48,10 +51,41 @@ class AudioContentPlaylistDetailActivity : BaseActivity<ActivityAudioContentPlay
LinearLayoutManager.VERTICAL, LinearLayoutManager.VERTICAL,
false false
) )
recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
outRect.left = 0
outRect.right = 0
when (parent.getChildAdapterPosition(view)) {
0 -> {
outRect.top = 0
outRect.bottom = 6.7f.dpToPx().toInt()
}
adapter.itemCount - 1 -> {
outRect.top = 6.7f.dpToPx().toInt()
outRect.bottom = 0
}
else -> {
outRect.top = 6.7f.dpToPx().toInt()
outRect.bottom = 6.7f.dpToPx().toInt()
}
}
}
})
recyclerView.adapter = adapter recyclerView.adapter = adapter
binding.llPlay.setOnClickListener { } binding.llPlay.setOnClickListener { }
binding.llShuffle.setOnClickListener { } binding.llShuffle.setOnClickListener { }
binding.toolbar.tvBack.setOnClickListener { finish() }
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@ -73,6 +107,7 @@ class AudioContentPlaylistDetailActivity : BaseActivity<ActivityAudioContentPlay
binding.tvTitle.text = it.title binding.tvTitle.text = it.title
binding.tvContentCount.text = " ${it.contentCount}" binding.tvContentCount.text = " ${it.contentCount}"
binding.tvCreateDate.text = "만든 날짜 ${it.createdDate} " binding.tvCreateDate.text = "만든 날짜 ${it.createdDate} "
adapter.updateItems(it.contentList)
updateCoverImageLayout(imageUrlList = it.playlistCoverImageList) updateCoverImageLayout(imageUrlList = it.playlistCoverImageList)
} }
} }

View File

@ -1,5 +1,6 @@
package kr.co.vividnext.sodalive.audio_content.playlist.detail package kr.co.vividnext.sodalive.audio_content.playlist.detail
import android.annotation.SuppressLint
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -12,7 +13,7 @@ import kr.co.vividnext.sodalive.extensions.dpToPx
class AudioContentPlaylistDetailAdapter : class AudioContentPlaylistDetailAdapter :
RecyclerView.Adapter<AudioContentPlaylistDetailAdapter.ViewHolder>() { RecyclerView.Adapter<AudioContentPlaylistDetailAdapter.ViewHolder>() {
val items = mutableListOf<AudioContentPlaylistContent>() private val items = mutableListOf<AudioContentPlaylistContent>()
inner class ViewHolder( inner class ViewHolder(
private val binding: ItemPlaylistContentBinding private val binding: ItemPlaylistContentBinding
@ -43,4 +44,11 @@ class AudioContentPlaylistDetailAdapter :
} }
override fun getItemCount() = items.count() override fun getItemCount() = items.count()
@SuppressLint("NotifyDataSetChanged")
fun updateItems(items: List<AudioContentPlaylistContent>) {
this.items.clear()
this.items.addAll(items)
notifyDataSetChanged()
}
} }

View File

@ -14,14 +14,26 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginHorizontal="13.3dp"> android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="21.3dp">
<androidx.cardview.widget.CardView
android:id="@+id/cv_cover"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardBackgroundColor="@color/color_bbbbbb"
app:cardCornerRadius="4dp"
app:cardElevation="0dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="false"
app:contentPadding="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_cover" android:id="@+id/cl_cover"
android:layout_width="80dp" android:layout_width="80dp"
android:layout_height="80dp" android:layout_height="80dp">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView <ImageView
android:id="@+id/iv_cover_1" android:id="@+id/iv_cover_1"
@ -106,6 +118,7 @@
android:orientation="horizontal" android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5" /> app:layout_constraintGuide_percent="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<TextView <TextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
@ -118,8 +131,8 @@
android:textColor="@color/color_d2d2d2" android:textColor="@color/color_d2d2d2"
android:textSize="18.3sp" android:textSize="18.3sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/cl_cover" app:layout_constraintStart_toEndOf="@+id/cv_cover"
app:layout_constraintTop_toTopOf="@+id/cl_cover" app:layout_constraintTop_toTopOf="@+id/cv_cover"
tools:text="재생목록 제목" /> tools:text="재생목록 제목" />
<TextView <TextView
@ -132,7 +145,7 @@
android:maxLength="100" android:maxLength="100"
android:textColor="@color/color_909090" android:textColor="@color/color_909090"
android:textSize="12sp" android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/cl_cover" app:layout_constraintBottom_toBottomOf="@+id/cv_cover"
app:layout_constraintEnd_toEndOf="@+id/tv_title" app:layout_constraintEnd_toEndOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="@+id/tv_title" app:layout_constraintStart_toStartOf="@+id/tv_title"
app:layout_constraintTop_toBottomOf="@+id/tv_title" app:layout_constraintTop_toBottomOf="@+id/tv_title"
@ -142,12 +155,13 @@
android:id="@+id/tv_create_date" android:id="@+id/tv_create_date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="13.3dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center_vertical" android:gravity="center_vertical"
android:textColor="@color/color_909090" android:textColor="@color/color_909090"
android:textSize="13.3sp" android:textSize="13.3sp"
app:layout_constraintStart_toStartOf="@+id/cl_cover" app:layout_constraintStart_toStartOf="@+id/cv_cover"
app:layout_constraintTop_toBottomOf="@+id/cl_cover" app:layout_constraintTop_toBottomOf="@+id/cv_cover"
tools:text="만든 날짜 2024.11.28 " /> tools:text="만든 날짜 2024.11.28 " />
<TextView <TextView
@ -159,8 +173,8 @@
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_create_date" app:layout_constraintBottom_toBottomOf="@+id/tv_create_date"
app:layout_constraintStart_toEndOf="@+id/tv_create_date"
app:layout_constraintTop_toTopOf="@+id/tv_create_date" app:layout_constraintTop_toTopOf="@+id/tv_create_date"
app:layout_constraintEnd_toEndOf="parent"
tools:text=" 5개" /> tools:text=" 5개" />
<LinearLayout <LinearLayout