From 68c9c6a8cb9953ef5e8225fd378cec2bb27b7b12 Mon Sep 17 00:00:00 2001 From: wzq Date: Wed, 18 Oct 2023 16:30:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E7=9B=B8=E5=86=8C=20?= =?UTF-8?q?=E7=85=A7=E7=89=87=E5=88=97=E8=A1=A8=E5=88=86=E9=A1=B5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../avroom/room_album/RoomAlbumFragment.kt | 25 +++++++++---- .../room_album/RoomAlbumFragmentViewModel.kt | 36 +++++++++++++------ .../main/res/layout/fragment_room_album.xml | 5 ++- gradle.properties | 4 +-- 4 files changed, 50 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt index 7152f8084..9fcb77755 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt @@ -98,7 +98,7 @@ class RoomAlbumFragment : BaseViewBindingFragment() { }.apply { setEnableLoadMore(true) setOnLoadMoreListener({ - viewModel.loadPhotos(type, page++) + viewModel.loadPhotos(type, ++page) }, binding.recyclerView) setOnItemChildClickListener { _, view, position -> @@ -141,12 +141,7 @@ class RoomAlbumFragment : BaseViewBindingFragment() { } viewModel.myPhotosLiveData.observe(this@RoomAlbumFragment) { - it?.let { list -> - adapter.loadMoreComplete() - if (list.size - adapter.data.size < Constants.PAGE_SIZE) { - adapter.loadMoreEnd() - } - } + adapter.loadMoreComplete() adapter.setNewDiffData(object : BaseQuickDiffCallback(it) { override fun areItemsTheSame( @@ -169,6 +164,22 @@ class RoomAlbumFragment : BaseViewBindingFragment() { viewModel.deleteLiveData.observe(this) { viewModel.loadPhotos(type) } + viewModel.loadStateLiveData.observe(this) { + if (it == true) { + adapter.loadMoreComplete() + } else { + if (page > 1) { + page-- + } + adapter.loadMoreFail() + } + binding.refreshLayout.finishRefresh() + } + viewModel.noMoreLiveData.observe(this) { + if (it == true) { + adapter.loadMoreEnd() + } + } } companion object { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragmentViewModel.kt b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragmentViewModel.kt index f68b16249..9749975f4 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragmentViewModel.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragmentViewModel.kt @@ -5,7 +5,9 @@ import androidx.lifecycle.MutableLiveData import com.hjq.toast.ToastUtils import com.yizhuan.erban.avroom.bean.RoomAlbumPhotoInfo import com.yizhuan.erban.base.BaseViewModel +import com.yizhuan.xchat_android_core.Constants import com.yizhuan.xchat_android_core.manager.AvRoomDataManager +import com.yizhuan.xchat_android_core.utils.toast class RoomAlbumFragmentViewModel : BaseViewModel() { @@ -15,19 +17,33 @@ class RoomAlbumFragmentViewModel : BaseViewModel() { private val _deleteLiveData = MutableLiveData() val deleteLiveData: LiveData = _deleteLiveData - fun loadPhotos(type: Int, page: Int = 1) { - safeLaunch { - val myPhotos = RoomAlbumModel.loadPhotos(AvRoomDataManager.get().roomUid, type, page) + private val _loadStateLiveData = MutableLiveData() + val loadStateLiveData: LiveData = _loadStateLiveData - val value = _myPhotosLiveData.value - if (page == 1) { - _myPhotosLiveData.value = myPhotos!!.toMutableList() - return@safeLaunch + private val _noMoreLiveData = MutableLiveData() + val noMoreLiveData: LiveData = _noMoreLiveData + + fun loadPhotos(type: Int, page: Int = 1) { + safeLaunch(block = { + val data = RoomAlbumModel.loadPhotos(AvRoomDataManager.get().roomUid, type, page) + + data?.let { + val value = _myPhotosLiveData.value + if (page == 1) { + _myPhotosLiveData.value = it.toMutableList() + } else { + value?.addAll(it) + _myPhotosLiveData.value = value + } + + _loadStateLiveData.value = true + _noMoreLiveData.value = it.size < Constants.PAGE_SIZE } - value?.addAll(myPhotos!!) - _myPhotosLiveData.value = value - } + }, onError = { + it.message.toast() + _loadStateLiveData.value = false + }) } fun sendPhoto(photoId: Int) { diff --git a/app/src/main/res/layout/fragment_room_album.xml b/app/src/main/res/layout/fragment_room_album.xml index 5cd70728e..91659e8c0 100644 --- a/app/src/main/res/layout/fragment_room_album.xml +++ b/app/src/main/res/layout/fragment_room_album.xml @@ -1,8 +1,11 @@ + android:layout_height="match_parent" + app:srlEnableAutoLoadmore="false" + app:srlEnableLoadmore="false">