Git Product home page Git Product logo

Comments (15)

liangjingkanji avatar liangjingkanji commented on August 17, 2024

当配置变更后你认为监听函数是否应当重新执行? 比如showLoading, 重新执行肯定触发内部的数据加载逻辑(比如onRefesh). 一般情况下数据的恢复应该也会在onRefresh中处理, 而视图的自定义动画在onLoading中. 那么理论上是应当重新执行showLoading. 但是Activity的onCreate本身就会重新执行.

loaded被置为false应当也是正常行为

from statelayout.

ZXHHYJ avatar ZXHHYJ commented on August 17, 2024

viewpager在配置变更后仍旧能恢复最后的选中item状态,recycleview等等都能在配置变更时恢复最后的状态,我个人认为丢失状态是不合理的。

解决方案有很多种,我个人认为statuslayout可以提供一个设置默认展示status的接口,这个status仅在初次创建view时主动显示一次,配置变更后显示最后的status,并且配置变更后恢复loaded,这种方案可以适配更多场景下的使用,且是符合预期的。

若配置变更后还是要loading,直接在每次创建statuslayout时showLoading即可

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

那就是恢复的时候不触发onRefresh. 但是触发onLoading是吧

from statelayout.

ZXHHYJ avatar ZXHHYJ commented on August 17, 2024

配置变更后应该什么都不触发吧,理论上在良好的网络情况下,loading应该只触发一次,refresh也是只触发一次,chontent一般都会有下拉刷新的控件,loading成功后,之后的刷新,应该是由用户自己主动请求的。

比如你在查询一首歌曲,你已经找了很久但没找到,此时你打开了暗黑模式,程序发生了配置变更,你当然不希望这个查询界面重新loading吧,这太奇怪了。

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

showError会传递对象给onError, onError内部可能会对视图进行自定义动画或者根据传递对话显示不同的错误页面, 所以onError必须在恢复以后执行.
那么传递的对象也得再次被传递.

比如你在查询一首歌曲, 即使恢复了为内容缺省页, 但是你不可能要求StateLayout还为你恢复歌曲吧? 这是无法实现的.

你理解错了什么是恢复页面, 恢复页面你应当在Activity的onCreate中判断是否存在可恢复的数据, 如果存在直接就不用执行showLoading等缺省页函数, 直接显示数据即可.

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

我这里简要描述何为恢复页面数据

val model:Model by viewModels()

stateLayout.onRefresh {
    // 网络请求
}

if(model == null) {
   showLoading() // 显示加载中缺省页(触发onRefresh)
} else {
   binding.m = model // 直接恢复数据
}

from statelayout.

ZXHHYJ avatar ZXHHYJ commented on August 17, 2024

这里可能是我的问题,但是否可以在配置变更后恢复loaded

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

loaded是保证contentView存在有效数据展示. 但是配置变更/意外销毁后无法保证你已经恢复数据, 所以我是不建议恢复loaded的(而且这个值本身是给StateLayout使用的).

你自己恢复数据后手动赋值loaded或者showContent如何?

val model:Model by viewModels()

stateLayout.onRefresh {
    // 网络请求
}

if(model == null) {
   showLoading() // 显示加载中缺省页(触发onRefresh)
} else {
   binding.m = model // 直接恢复数据
   stateLayout.loaded = true // 这里加一行显示如何?
}

我还是很欢迎探讨需求的

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

update 1.2.0, 优化函数

implementation 'com.github.liangjingkanji:StateLayout:1.2.0'

from statelayout.

ZXHHYJ avatar ZXHHYJ commented on August 17, 2024
class Model:ViewModel(){
val list = ArrayList<XXX>()
}

我的情况和你给出的例子有些不同,我在viewmodel中的数据是val修饰的list,而你的是model
当使用val修饰list之后往往不能使用if( list==null)判断是否加载过数据,而使用isEmpty的话,若list为空,就有两种可能性:
1.没有加载过数据
2.加载过数据,但数据为空

所以我才会觉得配置变更后恢复loaded参数为什么重要了,在这样的情况下loaded==true且list.isEmpty==true,可以直接showEmpty,不需要重新加载一次再显示showEmpty。

若在配置变更后不需要恢复loaded,可以在创建view时自己设置loaded=false

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

我不确定你是否知道viewModel的作用就是恢复数据

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

loaded是缺省页使用的,如果为true,你恢复数据失败会导致无法showempty或者showError. 要求恢复的数据都得继承ViewModel, 不存在是list

from statelayout.

ZXHHYJ avatar ZXHHYJ commented on August 17, 2024

我的就是list,我在基于okhttp上自己写了一个网络请求库,可以将jsonarray自动装载list然后返回

from statelayout.

ZXHHYJ avatar ZXHHYJ commented on August 17, 2024

我的viewmodel就是用来恢复数据的,只不过在我的使用场景下,放的是list

from statelayout.

liangjingkanji avatar liangjingkanji commented on August 17, 2024

你list放到ViewModel里面就和ViewModel一起恢复了 你判断viewModel是否为空就行了

from statelayout.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.