From cdfed6359ec809b6567ce62bf2fcd2d887b2bb75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E7=BB=B4?= Date: Mon, 11 Mar 2024 15:24:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E8=BD=AE=E6=92=AD=E5=8F=91=E7=8E=B0=E9=A1=B5=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E5=8A=A0=E8=BD=BD=E6=B8=B8=E6=88=8F=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8LiveData=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/custom/CustomPageViewModel.kt | 17 +++++++------- .../OnCustomPageEventListener.kt | 3 +-- .../CustomHomeSlideWithCardsViewHolder.kt | 23 +++++++++++++++---- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageViewModel.kt b/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageViewModel.kt index b76fee577e..2941103a42 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageViewModel.kt @@ -90,7 +90,6 @@ class CustomPageViewModel( private val subjectChangedMap: ArrayMap> = ArrayMap() - var slideDiscoveryGames = emptyList() var slideDiscoveryGamesPage = -1 private lateinit var _pageTracker: CustomPageTracker @@ -425,18 +424,21 @@ class CustomPageViewModel( _changeAppBarColorAction.value = Event(color) } - override fun loadSlideDiscoverCardGames(homeSubSlide: HomeSubSlide, callback: () -> Unit) { - if (slideDiscoveryGamesPage != homeSubSlide.repeatCount) { + private val _slideDiscoveryCardGames = MutableLiveData>() + val slideDiscoveryCardGames: LiveData> = _slideDiscoveryCardGames + + override fun loadSlideDiscoverCardGames(homeSubSlide: HomeSubSlide) { + if (slideDiscoveryGamesPage == homeSubSlide.repeatCount && _slideDiscoveryCardGames.value != null) { + _slideDiscoveryCardGames.postValue(ArrayList(_slideDiscoveryCardGames.value!!)) + } else { repository.loadSlideDiscoverCardGames() .compose(observableToMain()) .subscribe(object : Response>() { override fun onResponse(response: List?) { response?.let { SPUtils.setBoolean(Constants.SP_DISCOVER_FORCE_REFRESH, false) - slideDiscoveryGames = it + _slideDiscoveryCardGames.postValue(it) slideDiscoveryGamesPage = homeSubSlide.repeatCount - homeSubSlide.cardData.games = it - callback.invoke() } } @@ -444,9 +446,6 @@ class CustomPageViewModel( Utils.toast(getApplication(), "网络异常") } }) - } else { - homeSubSlide.cardData.games = slideDiscoveryGames - callback.invoke() } } diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/eventlistener/OnCustomPageEventListener.kt b/app/src/main/java/com/gh/gamecenter/home/custom/eventlistener/OnCustomPageEventListener.kt index de76a3efa6..b3c1ebd497 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/eventlistener/OnCustomPageEventListener.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/eventlistener/OnCustomPageEventListener.kt @@ -5,7 +5,6 @@ import com.gh.gamecenter.entity.HomeSubSlide import com.gh.gamecenter.entity.RatingComment import com.gh.gamecenter.entity.SubjectEntity import com.gh.gamecenter.feature.entity.GameEntity -import com.gh.gamecenter.home.custom.model.CustomDiscoverCardItem import com.gh.gamecenter.home.custom.model.CustomPageData import com.gh.gamecenter.home.custom.model.CustomPageItem import com.gh.gamecenter.home.custom.model.CustomSubjectCollectionItem @@ -33,7 +32,7 @@ interface OnCustomPageEventListener { fun onChangeAppBarColor(color: Int) - fun loadSlideDiscoverCardGames(homeSubSlide: HomeSubSlide, callback: () -> Unit) + fun loadSlideDiscoverCardGames(homeSubSlide: HomeSubSlide) /** * 通过Game进入游戏详情 diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideWithCardsViewHolder.kt b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideWithCardsViewHolder.kt index 8dfdbc3253..6919d151e9 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideWithCardsViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideWithCardsViewHolder.kt @@ -10,6 +10,7 @@ import androidx.constraintlayout.widget.ConstraintSet import androidx.core.graphics.ColorUtils import androidx.core.view.isVisible import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.Observer import androidx.recyclerview.widget.PagerSnapHelper import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 @@ -48,7 +49,7 @@ import kotlin.math.abs */ class CustomHomeSlideWithCardsViewHolder( viewModel: CustomPageViewModel, - lifecycleOwner: LifecycleOwner, + private val lifecycleOwner: LifecycleOwner, val binding: HomeSlideWithCardsCustomBinding, ) : BaseCustomViewHolder(viewModel, binding.root), OnCustomPageRefreshStateListener { @@ -97,6 +98,9 @@ class CustomHomeSlideWithCardsViewHolder( adapter.scrollToNextPage() } + private var firstSubSlide: HomeSubSlide? = null + private var secondSubSlide: HomeSubSlide? = null + init { binding.recyclerView.itemAnimator = null lifecycleOwner.lifecycle.addObserver(bannerController) @@ -271,11 +275,13 @@ class CustomHomeSlideWithCardsViewHolder( val firstSubSlidePosition = (viewModel.refreshCount * 2) % slideList.size val secondSubSlidePosition = (viewModel.refreshCount * 2 + 1) % slideList.size slideList.getOrNull(firstSubSlidePosition)?.let { + firstSubSlide = it it.sequence = firstSubSlidePosition it.repeatCount = (viewModel.refreshCount * 2) / slideList.size bindCard(binding.firstCv, it, pageConfigure.exposureSourceList, 0) } slideList.getOrNull(secondSubSlidePosition)?.let { + secondSubSlide = it it.sequence = secondSubSlidePosition it.repeatCount = (viewModel.refreshCount * 2 + 1) / slideList.size bindCard(binding.secondCv, it, pageConfigure.exposureSourceList, 1) @@ -338,9 +344,18 @@ class CustomHomeSlideWithCardsViewHolder( // 获取发现卡片游戏 if (homeSubSlide.cardType == "game_explore" && homeSubSlide.cardData.games.isEmpty()) { - viewModel.loadSlideDiscoverCardGames(homeSubSlide) { - bindCard(homeSlideCardItemBinding, homeSubSlide, basicExposureSource, position) - } + viewModel.slideDiscoveryCardGames.observe(lifecycleOwner, object : Observer> { + override fun onChanged(t: List?) { + val currentSubSlide = if (position == 0) firstSubSlide else secondSubSlide + if (t != null && homeSubSlide == currentSubSlide) { + bindCard(homeSlideCardItemBinding, homeSubSlide.apply { + cardData.games = t + }, basicExposureSource, position) + viewModel.slideDiscoveryCardGames.removeObserver(this) + } + } + }) + viewModel.loadSlideDiscoverCardGames(homeSubSlide) return }