fix: 自定义页面轮播发现页卡片加载游戏改为使用LiveData实现
This commit is contained in:
@ -90,7 +90,6 @@ class CustomPageViewModel(
|
||||
|
||||
private val subjectChangedMap: ArrayMap<String, List<GameEntity>> = ArrayMap()
|
||||
|
||||
var slideDiscoveryGames = emptyList<GameEntity>()
|
||||
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<List<GameEntity>>()
|
||||
val slideDiscoveryCardGames: LiveData<List<GameEntity>> = _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<List<GameEntity>>() {
|
||||
override fun onResponse(response: List<GameEntity>?) {
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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进入游戏详情
|
||||
|
||||
@ -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<List<GameEntity>> {
|
||||
override fun onChanged(t: List<GameEntity>?) {
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user