@@ -15,13 +15,15 @@ import kotlinx.coroutines.launch
1515 */
1616abstract class BaseLPagingModel <M > : BaseViewModel () {
1717
18- lateinit var mDataSource: PageKeyedDataSource <Int , M >
18+ private lateinit var mDataSource: PageKeyedDataSource <Int , M >
1919
2020 val mBoundaryData = MutableLiveData (false )// 控制页面显示状态
2121
22+ val refreshState = MutableLiveData (false )
23+
2224 val loadMoreState = MutableLiveData (false )
2325
24- var loadMoreRetry: (() -> Unit )? = null
26+ private var loadMoreRetry: (() -> Unit )? = null
2527
2628 val pagedList: LiveData <PagedList <M >> by lazy {
2729 LivePagedListBuilder <Int , M >(
@@ -43,17 +45,23 @@ abstract class BaseLPagingModel<M> : BaseViewModel() {
4345 params : LoadInitialParams <Int >,
4446 callback : LoadInitialCallback <Int , M >
4547 ) {
46- launch {
47- val list = getDataList(1 )
48- mBoundaryData.postValue(list.isNotEmpty())
49- callback.onResult(list, null , 2 )
48+ viewModelScope.launch {
49+ try {
50+ val list = getDataList(1 )
51+ mBoundaryData.postValue(list.isNotEmpty())
52+ callback.onResult(list, null , 2 )
53+ mStateLiveData.value = SuccessState
54+ refreshState.postValue(false )
55+ } catch (e: Exception ) {
56+ refreshState.postValue(true )
57+ mStateLiveData.value = ErrorState (e.message)
58+ }
5059 }
5160 }
5261
5362 override fun loadAfter (params : LoadParams <Int >, callback : LoadCallback <Int , M >) {
5463 viewModelScope.launch {
5564 try {
56- mStateLiveData.value = LoadState
5765 val list = getDataList(params.key)
5866 callback.onResult(
5967 list,
@@ -65,7 +73,7 @@ abstract class BaseLPagingModel<M> : BaseViewModel() {
6573 mStateLiveData.value = ErrorState (e.message)
6674 loadMoreState.postValue(true )
6775 loadMoreRetry = {
68- // 保存加载更多失败时的场景
76+ // 保存加载更多失败时的场景,防止第一次加载失败后,后续无法再次调用loadAfter
6977 loadMoreFail(params, callback)
7078 }
7179 }
@@ -83,7 +91,7 @@ abstract class BaseLPagingModel<M> : BaseViewModel() {
8391 loadMoreRetry?.invoke()
8492 }
8593
86- fun loadMoreFail (// 加载更多失败时调用
94+ private fun loadMoreFail (// 加载更多失败时调用
8795 params : PageKeyedDataSource .LoadParams <Int >,
8896 callback : PageKeyedDataSource .LoadCallback <Int , M >
8997 ) {
0 commit comments