Comments (15)
当配置变更后你认为监听函数是否应当重新执行? 比如showLoading
, 重新执行肯定触发内部的数据加载逻辑(比如onRefesh). 一般情况下数据的恢复应该也会在onRefresh中处理, 而视图的自定义动画在onLoading中. 那么理论上是应当重新执行showLoading. 但是Activity的onCreate本身就会重新执行.
loaded被置为false应当也是正常行为
from statelayout.
viewpager在配置变更后仍旧能恢复最后的选中item状态,recycleview等等都能在配置变更时恢复最后的状态,我个人认为丢失状态是不合理的。
解决方案有很多种,我个人认为statuslayout可以提供一个设置默认展示status的接口,这个status仅在初次创建view时主动显示一次,配置变更后显示最后的status,并且配置变更后恢复loaded,这种方案可以适配更多场景下的使用,且是符合预期的。
若配置变更后还是要loading,直接在每次创建statuslayout时showLoading即可
from statelayout.
那就是恢复的时候不触发onRefresh. 但是触发onLoading是吧
from statelayout.
配置变更后应该什么都不触发吧,理论上在良好的网络情况下,loading应该只触发一次,refresh也是只触发一次,chontent一般都会有下拉刷新的控件,loading成功后,之后的刷新,应该是由用户自己主动请求的。
比如你在查询一首歌曲,你已经找了很久但没找到,此时你打开了暗黑模式,程序发生了配置变更,你当然不希望这个查询界面重新loading吧,这太奇怪了。
from statelayout.
showError会传递对象给onError, onError内部可能会对视图进行自定义动画或者根据传递对话显示不同的错误页面, 所以onError必须在恢复以后执行
.
那么传递的对象也得再次被传递.
比如你在查询一首歌曲, 即使恢复了为内容缺省页, 但是你不可能要求StateLayout还为你恢复歌曲吧? 这是无法实现的.
你理解错了什么是恢复页面, 恢复页面你应当在Activity的onCreate中判断是否存在可恢复的数据, 如果存在直接就不用执行showLoading等缺省页函数, 直接显示数据即可.
from statelayout.
我这里简要描述何为恢复页面数据
val model:Model by viewModels()
stateLayout.onRefresh {
// 网络请求
}
if(model == null) {
showLoading() // 显示加载中缺省页(触发onRefresh)
} else {
binding.m = model // 直接恢复数据
}
from statelayout.
这里可能是我的问题,但是否可以在配置变更后恢复loaded
from statelayout.
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.
update 1.2.0, 优化函数
implementation 'com.github.liangjingkanji:StateLayout:1.2.0'
from statelayout.
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.
我不确定你是否知道viewModel的作用就是恢复数据
from statelayout.
loaded是缺省页使用的,如果为true,你恢复数据失败会导致无法showempty或者showError. 要求恢复的数据都得继承ViewModel, 不存在是list
from statelayout.
我的就是list,我在基于okhttp上自己写了一个网络请求库,可以将jsonarray自动装载list然后返回
from statelayout.
我的viewmodel就是用来恢复数据的,只不过在我的使用场景下,放的是list
from statelayout.
你list放到ViewModel里面就和ViewModel一起恢复了 你判断viewModel是否为空就行了
from statelayout.
Related Issues (20)
- 东哥,StateLayout在CoordinatorLayoutFragment中该怎么使用 HOT 3
- 我如何定义不同状态的缺省页来显示
- 屏幕旋转,报ID重复异常 HOT 2
- 库无法导入 HOT 6
- RecyclerView搭配StateLayout的问题 HOT 7
- 请问如果自定义一个布局完全不同于四种预设状态的缺省页? HOT 10
- 建议新增一个显示弹窗的方法 HOT 6
- 希望将StateLayout类改为Open可继承状态 HOT 1
- 提个问题。关于error过后的重试问题 HOT 5
- FadeStateChangedHandler 里的 stateLayout 内存泄露 HOT 1
- view会重复显示 HOT 15
- xml 嵌套recyclerview 没生效 HOT 7
- 骨骼动画 HOT 4
- 内存泄漏 HOT 1
- 重复调用showXXX不触发onXXX回调 HOT 2
- 关于增加标题栏的显示 HOT 10
- showContent后布局消失 HOT 1
- 结合RecyclerView使用出现无法显示内容的问题 HOT 3
- showConent之后 内容被隐藏了 HOT 7
- 请问有获取page正在显示的状态页面的方法吗? HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from statelayout.