andorid view如何附带数据_android - 如何在Android的ViewModel中存储分页数据?

在旋转设备时,我丢失了先前加载的页面数据。我该如何解决?

通过以下实现,只有当前页面的数据会保留在ViewModel中,而所有其他页面都将丢失。有什么解决办法吗?

API响应(第1页)

http://www.mocky.io/v2/5ed20f9732000052005ca0a6

ViewModelclass NewsApiViewModel(application: Application) : AndroidViewModel(application) {

val topHeadlines = MutableLiveData()

var networkLiveData = MutableLiveData()

fun fetchTopHeadlines(pageNumber: Int) {

if (!getApplication().hasNetworkConnection()) {

networkLiveData.value = false

}

val destinationService = ServiceBuilder.buildService(DestinationService::class.java)

val requestCall = destinationService.getTopHeadlines(AppConstants.COUNTRY_INDIA, AppConstants.PAGE_SIZE, pageNumber, AppConstants.NEWS_API_KEY)

requestCall.enqueue(object : Callback {

override fun onFailure(call: Call, t: Throwable) {

Log.e("ANKUSH", "$t ")

}

override fun onResponse(call: Call, response: Response) {

if (response.isSuccessful) {

topHeadlines.postValue(response.body())

}

}

})

}

}

MainActivity

fun observeAndUpdateData() {

activity.viewModel.topHeadlines.observeForever {

isDataLoading = false

checkAndShowLoader(isDataLoading)

if (AppConstants.STATUS_OK == it.status) {

it.articles?.let { articles ->

if (articles.size < AppConstants.PAGE_SIZE) {

activity.isAllDataLoaded = true

}

activity.adapter.updateData(articles)

}

}

}

}

fun getTopHeadlines(pageNumber: Int) {

if (activity.isAllDataLoaded) return

isDataLoading = true

checkAndShowLoader(isDataLoading)

activity.viewModel.fetchTopHeadlines(pageNumber)

}

最佳答案

您只需要在ViewModel的列表中存储收集的current page和the data。

因此,请勿将页码传递给fetchTopHeadlines函数,而应考虑在ViewModel中拥有一个私有(private)全局变量,并且每次调用fetchTopHeadlines时,也应增加页码。

另外,为防止丢失先前的页面,请考虑在ViewModel中使用ArrayList。从服务器获取数据后,首先将所有数据放入ViewModel定义的列表中,然后将该列表发布到View。

Here is a sample that helps you dealing with it.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值