diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt index bc2fe5f9..41e4ca23 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt @@ -4,12 +4,15 @@ import android.graphics.Rect import android.os.Bundle import android.view.View import android.widget.Toast +import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import kr.co.vividnext.sodalive.BuildConfig import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomActivity import kr.co.vividnext.sodalive.common.LoadingDialog +import kr.co.vividnext.sodalive.common.YandexInlineBannerHeaderAdapter import kr.co.vividnext.sodalive.databinding.FragmentTalkTabBinding import kr.co.vividnext.sodalive.extensions.dpToPx import org.koin.android.ext.android.inject @@ -20,6 +23,7 @@ class TalkTabFragment : BaseFragment( private val viewModel: TalkTabViewModel by inject() private lateinit var adapter: TalkTabAdapter + private lateinit var bannerAdapter: YandexInlineBannerHeaderAdapter private lateinit var loadingDialog: LoadingDialog @@ -34,7 +38,17 @@ class TalkTabFragment : BaseFragment( viewModel.refreshTalkRooms() } + override fun onDestroyView() { + bannerAdapter.destroy() + super.onDestroyView() + } + private fun setupRecyclerView() { + val headerCount = 1 + bannerAdapter = YandexInlineBannerHeaderAdapter( + adUnitId = BuildConfig.YANDEX_INLINE_BANNER_TALK_TAB_AD_UNIT_ID, + screenWidth = screenWidth + ) adapter = TalkTabAdapter { startActivity( ChatRoomActivity.newIntent( @@ -56,16 +70,28 @@ class TalkTabFragment : BaseFragment( ) { super.getItemOffsets(outRect, view, parent, state) + val position = parent.getChildAdapterPosition(view) + if (position < headerCount) { + outRect.set(0, 0, 0, 0) + return + } + + val adjustedPosition = position - headerCount + val lastItemPosition = adapter.itemCount - 1 + outRect.left = 24f.dpToPx().toInt() outRect.right = 24f.dpToPx().toInt() - when (parent.getChildAdapterPosition(view)) { + when (adjustedPosition) { 0 -> { - outRect.top = 24f.dpToPx().toInt() - outRect.bottom = 12f.dpToPx().toInt() + outRect.bottom = if (adjustedPosition == lastItemPosition) { + 24f.dpToPx().toInt() + } else { + 12f.dpToPx().toInt() + } } - adapter.itemCount - 1 -> { + lastItemPosition -> { outRect.top = 12f.dpToPx().toInt() outRect.bottom = 24f.dpToPx().toInt() } @@ -81,7 +107,7 @@ class TalkTabFragment : BaseFragment( recyclerView.apply { val lm = LinearLayoutManager(requireContext()) layoutManager = lm - adapter = this@TalkTabFragment.adapter + adapter = ConcatAdapter(bannerAdapter, this@TalkTabFragment.adapter) // 스크롤 로딩 리스너: 끝에 도달하면 다음 페이지 로드 addOnScrollListener(object : RecyclerView.OnScrollListener() { @@ -109,7 +135,7 @@ class TalkTabFragment : BaseFragment( adapter.submitList(it) } else { adapter.submitList(emptyList()) - binding.rvTalk.visibility = View.GONE + binding.rvTalk.visibility = View.VISIBLE binding.tvEmpty.visibility = View.VISIBLE binding.tvEmpty.setText(R.string.screen_chat_talk_empty) } diff --git a/app/src/main/res/layout/fragment_talk_tab.xml b/app/src/main/res/layout/fragment_talk_tab.xml index ddf2a6f1..ce117af8 100644 --- a/app/src/main/res/layout/fragment_talk_tab.xml +++ b/app/src/main/res/layout/fragment_talk_tab.xml @@ -24,8 +24,8 @@ android:textSize="20sp" android:fontFamily="@font/regular" android:visibility="gone" - app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" />