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 }