콘텐츠 큐레이션 전체보기 - UI 형태 그리드로 변경

This commit is contained in:
klaus 2023-09-27 15:49:00 +09:00
parent a286ee760d
commit a53b76415b
2 changed files with 44 additions and 32 deletions

View File

@ -8,16 +8,18 @@ import android.view.View
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
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
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.AudioContentAdapter
import kr.co.vividnext.sodalive.audio_content.AudioContentViewModel import kr.co.vividnext.sodalive.audio_content.AudioContentViewModel
import kr.co.vividnext.sodalive.audio_content.all.AudioContentNewAllAdapter
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
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.ActivityAudioContentCurationBinding import kr.co.vividnext.sodalive.databinding.ActivityAudioContentCurationBinding
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
@ -28,7 +30,7 @@ class AudioContentCurationActivity : BaseActivity<ActivityAudioContentCurationBi
private val viewModel: AudioContentCurationViewModel by inject() private val viewModel: AudioContentCurationViewModel by inject()
private lateinit var loadingDialog: LoadingDialog private lateinit var loadingDialog: LoadingDialog
private lateinit var adapter: AudioContentAdapter private lateinit var adapter: AudioContentNewAllAdapter
private var curationId: Long = 0 private var curationId: Long = 0
private lateinit var title: String private lateinit var title: String
@ -52,19 +54,25 @@ class AudioContentCurationActivity : BaseActivity<ActivityAudioContentCurationBi
binding.toolbar.tvBack.text = title binding.toolbar.tvBack.text = title
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
adapter = AudioContentAdapter { adapter = AudioContentNewAllAdapter(
itemWidth = (screenWidth - 40f.dpToPx().toInt()) / 2,
onClickItem = {
startActivity( startActivity(
Intent(applicationContext, AudioContentDetailActivity::class.java).apply { Intent(this, AudioContentDetailActivity::class.java).apply {
putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, it) putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, it)
} }
) )
},
onClickCreator = {
startActivity(
Intent(this, UserProfileActivity::class.java).apply {
putExtra(Constants.EXTRA_USER_ID, it)
} }
binding.rvCuration.layoutManager = LinearLayoutManager(
applicationContext,
LinearLayoutManager.VERTICAL,
false
) )
}
)
binding.rvCuration.layoutManager = GridLayoutManager(this, 2)
binding.rvCuration.addItemDecoration(object : RecyclerView.ItemDecoration() { binding.rvCuration.addItemDecoration(object : RecyclerView.ItemDecoration() {
override fun getItemOffsets( override fun getItemOffsets(
@ -75,25 +83,31 @@ class AudioContentCurationActivity : BaseActivity<ActivityAudioContentCurationBi
) { ) {
super.getItemOffsets(outRect, view, parent, state) super.getItemOffsets(outRect, view, parent, state)
when (parent.getChildAdapterPosition(view)) { val position = parent.getChildAdapterPosition(view)
0 -> { if (position % 2 == 0) {
outRect.top = 40f.dpToPx().toInt() outRect.left = 13.3f.dpToPx().toInt()
outRect.bottom = 20f.dpToPx().toInt() outRect.right = 6.7f.dpToPx().toInt()
} else {
outRect.left = 6.7f.dpToPx().toInt()
outRect.right = 13.3f.dpToPx().toInt()
} }
adapter.itemCount - 1 -> { when (position) {
outRect.top = 20f.dpToPx().toInt() 0, 1 -> {
outRect.bottom = 40f.dpToPx().toInt() outRect.top = 13.3f.dpToPx().toInt()
outRect.bottom = 6.7f.dpToPx().toInt()
}
adapter.itemCount - 1, adapter.itemCount - 2 -> {
outRect.top = 6.7f.dpToPx().toInt()
outRect.bottom = 13.3f.dpToPx().toInt()
} }
else -> { else -> {
outRect.top = 20f.dpToPx().toInt() outRect.top = 6.7f.dpToPx().toInt()
outRect.bottom = 20f.dpToPx().toInt() outRect.bottom = 6.7f.dpToPx().toInt()
} }
} }
outRect.left = 13.3f.dpToPx().toInt()
outRect.right = 13.3f.dpToPx().toInt()
} }
}) })
@ -145,14 +159,12 @@ class AudioContentCurationActivity : BaseActivity<ActivityAudioContentCurationBi
viewModel.contentListLiveData.observe(this) { viewModel.contentListLiveData.observe(this) {
if (viewModel.page - 1 == 1) { if (viewModel.page - 1 == 1) {
adapter.items.clear() adapter.clear()
binding.rvCuration.scrollToPosition(0) binding.rvCuration.scrollToPosition(0)
} }
binding.tvTotalCount.text = "${it.totalCount}" binding.tvTotalCount.text = "${it.totalCount}"
adapter.addItems(it.items)
adapter.items.addAll(it.items)
adapter.notifyDataSetChanged()
} }
viewModel.sort.observe(this) { viewModel.sort.observe(this) {

View File

@ -1,9 +1,9 @@
package kr.co.vividnext.sodalive.audio_content.curation package kr.co.vividnext.sodalive.audio_content.curation
import com.google.gson.annotations.SerializedName import com.google.gson.annotations.SerializedName
import kr.co.vividnext.sodalive.explorer.profile.GetAudioContentListItem import kr.co.vividnext.sodalive.audio_content.main.GetAudioContentMainItem
data class GetCurationContentResponse( data class GetCurationContentResponse(
@SerializedName("totalCount") val totalCount: Int, @SerializedName("totalCount") val totalCount: Int,
@SerializedName("items") val items: List<GetAudioContentListItem> @SerializedName("items") val items: List<GetAudioContentMainItem>
) )