加载下一页

This commit is contained in:
renhaoting 2025-11-19 14:55:59 +08:00
parent e4dc667e7a
commit 5e6dd1b7d0
5 changed files with 15 additions and 6 deletions

View File

@ -51,7 +51,7 @@ interface YoutubeApi {
@Query("regionCode") regionCode: String="BR", @Query("regionCode") regionCode: String="BR",
@Query("maxResults") maxResults: Int=3, @Query("maxResults") maxResults: Int=3,
@Query("videoEmbeddable") videoEmbeddable: Boolean=true, @Query("videoEmbeddable") videoEmbeddable: Boolean=true,
@Query("pageToken") pageToken: String="" @Query("pageToken") pageToken: String?=""
): ResYoutubePlayList ): ResYoutubePlayList

View File

@ -9,6 +9,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.ama.core.architecture.appBase.AppViewsFragment import com.ama.core.architecture.appBase.AppViewsFragment
import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
@ -19,6 +20,7 @@ import com.gamedog.vididin.main.fragments.home.fragment.HomeItemFragment
import com.gamedog.vididin.main.interfaces.OnSwitchTabListener import com.gamedog.vididin.main.interfaces.OnSwitchTabListener
import com.gamedog.vididin.main.interfaces.OnTabStyleListener import com.gamedog.vididin.main.interfaces.OnTabStyleListener
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import kotlin.getValue import kotlin.getValue
import com.gamedog.vididin.databinding.VididinappFeatureHomeFragmentHomeBinding as ViewBinding import com.gamedog.vididin.databinding.VididinappFeatureHomeFragmentHomeBinding as ViewBinding
import com.gamedog.vididin.main.fragments.home.YoutubeViewModel as ViewModel import com.gamedog.vididin.main.fragments.home.YoutubeViewModel as ViewModel
@ -64,7 +66,9 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
// load more // load more
if (mViewPagerAdapter.itemCount > 0 && position == mViewPagerAdapter.itemCount - 2) { if (mViewPagerAdapter.itemCount > 0 && position == mViewPagerAdapter.itemCount - 2) {
// todo load more lifecycleScope.launch {
mViewModel.loadVideoPage()
}
} }
} }
@ -87,7 +91,7 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
} }
override fun ViewBinding.onUiStateCollect(uiState: UiState) { override fun ViewBinding.onUiStateCollect(uiState: UiState) {
mViewPagerAdapter.appendList(uiState.playLists) mViewPagerAdapter.submitList(uiState.playLists)
//viewPager2.setDataOrAdapter(uiState.playLists, 1) { mViewPagerAdapter } //viewPager2.setDataOrAdapter(uiState.playLists, 1) { mViewPagerAdapter }
} }

View File

@ -17,6 +17,6 @@ class DefaultYoutubeDatasource @Inject constructor(retrofit: Retrofit) : Youtube
override suspend fun getChannels( override suspend fun getChannels(
) = shopApi.getChannelList() ) = shopApi.getChannelList()
override suspend fun getVideoList(pageToken: String?) = shopApi.getVideoList() override suspend fun getVideoList(pageToken: String?) = shopApi.getVideoList(pageToken = pageToken)
} }

View File

@ -4,6 +4,7 @@ package com.gamedog.vididin.main.fragments.home
import com.ama.core.architecture.appBase.vm.AppViewModel import com.ama.core.architecture.appBase.vm.AppViewModel
import com.ama.core.architecture.page.RefreshRepository import com.ama.core.architecture.page.RefreshRepository
import com.gamedog.vididin.beans.ResYoutubePlayList
import com.gamedog.vididin.beans.YoutubeVideo import com.gamedog.vididin.beans.YoutubeVideo
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
@ -24,6 +25,10 @@ class YoutubeViewModel @Inject constructor(
override fun onRefreshRepository(): RefreshRepository<*> { override fun onRefreshRepository(): RefreshRepository<*> {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
fun loadVideoPage() {
mRepository.load()
}
} }
data class YoutubeUiState( data class YoutubeUiState(

View File

@ -58,8 +58,8 @@ abstract class BaseFragmentStateAdapter<T : BaseFragmentStateDiffItem>(
fun appendList(appendList: List<T>?) { fun appendList(appendList: List<T>?) {
val newList = mutableListOf<T>() val newList = mutableListOf<T>()
newList.addAll(getCurrentList()) newList.addAll(getCurrentList())
appendList?.let { newList?.let {
newList.addAll(appendList) newList.addAll(appendList!!)
} }
mDiffer.submitList(newList) mDiffer.submitList(newList)
} }