From 4ef880c350f0aa1c6b56077a0701c526aa5af737 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 27 Apr 2026 15:22:42 +0900 Subject: [PATCH] =?UTF-8?q?feat(original):=20=EC=98=A4=EB=A6=AC=EC=A7=80?= =?UTF-8?q?=EB=84=90=20=ED=83=AD=EC=97=90=20Yandex=20=EB=B0=B0=EB=84=88=20?= =?UTF-8?q?=ED=97=A4=EB=8D=94=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/original/OriginalTabFragment.kt | 28 +++++++++++++++++-- .../main/res/layout/fragment_original_tab.xml | 3 +- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/original/OriginalTabFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/original/OriginalTabFragment.kt index d2a2571a..8110774c 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/original/OriginalTabFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/original/OriginalTabFragment.kt @@ -11,6 +11,8 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.gson.Gson +import androidx.recyclerview.widget.ConcatAdapter +import kr.co.vividnext.sodalive.BuildConfig import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.base.SodaDialog @@ -18,6 +20,7 @@ import kr.co.vividnext.sodalive.chat.original.detail.OriginalWorkDetailActivity import kr.co.vividnext.sodalive.common.GridSpacingItemDecoration import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.common.YandexInlineBannerHeaderAdapter import kr.co.vividnext.sodalive.databinding.FragmentOriginalTabBinding import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.main.MainActivity @@ -36,6 +39,7 @@ class OriginalTabFragment : private val myPageViewModel: MyPageViewModel by inject() private lateinit var adapter: OriginalWorkListAdapter + private lateinit var bannerAdapter: YandexInlineBannerHeaderAdapter private lateinit var loadingDialog: LoadingDialog @@ -49,9 +53,19 @@ class OriginalTabFragment : viewModel.loadMore() } + override fun onDestroyView() { + bannerAdapter.destroy() + super.onDestroyView() + } + private fun setupRecycler() { val spanCount = 3 val spacingPx = 16f.dpToPx().toInt() + val headerCount = 1 + bannerAdapter = YandexInlineBannerHeaderAdapter( + adUnitId = BuildConfig.YANDEX_INLINE_BANNER_ORIGINAL_TAB_AD_UNIT_ID, + screenWidth = screenWidth + ) adapter = OriginalWorkListAdapter { id -> ensureLoginAndAuth { startActivity( @@ -64,12 +78,20 @@ class OriginalTabFragment : ) } } - binding.rvOriginal.layoutManager = GridLayoutManager(requireContext(), spanCount) + binding.rvOriginal.setPadding(0, 0, 0, 8f.dpToPx().toInt()) + binding.rvOriginal.layoutManager = GridLayoutManager(requireContext(), spanCount).apply { + spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { + override fun getSpanSize(position: Int): Int { + return if (position < headerCount) spanCount else 1 + } + } + } binding.rvOriginal.addItemDecoration( GridSpacingItemDecoration( spanCount, spacingPx, - true + true, + headerCount ) ) binding.rvOriginal.addOnScrollListener(object : RecyclerView.OnScrollListener() { @@ -83,7 +105,7 @@ class OriginalTabFragment : } } }) - binding.rvOriginal.adapter = adapter + binding.rvOriginal.adapter = ConcatAdapter(bannerAdapter, adapter) } private fun bind() { diff --git a/app/src/main/res/layout/fragment_original_tab.xml b/app/src/main/res/layout/fragment_original_tab.xml index 1c7732b6..79de17f3 100644 --- a/app/src/main/res/layout/fragment_original_tab.xml +++ b/app/src/main/res/layout/fragment_original_tab.xml @@ -9,10 +9,11 @@ android:id="@+id/rv_original" android:layout_width="0dp" android:layout_height="0dp" - app:layout_constraintTop_toTopOf="parent" + android:clipToPadding="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" tools:listitem="@layout/item_original_work" />