点击或者扫描二维码下载
Activity | Fragment | View | ViewPager2 |
---|---|---|---|
Lottie拓展(自定义State) | State刷新 | 网络请求 | sample |
---|---|---|---|
- 无需在布局添加视图代码
- 可显示自定义状态视图,任意拓展
- 可用于 Activity、Fragment、或指定的 View
- 自定义重新请求监听
- 支持xml直接嵌套且不限制要展示状态内容
- 可动态更新视图样式
- 可结合第三方控件使用
- 支持状态回调监听
- kotlin开发更易用的API
Step1. Add the JitPack repository to your build file
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.Zhao-Yan-Yan:MultiStatePage:2.0.1'
}
基础用法
val multiStateContainer = MultiStatePage.bindMultiState(view)
val multiStateContainer = MultiStatePage.bindMultiState(view) { multiStateContainer: MultiStateContainer ->
// 重试事件处理
}
拓展方法
val multiStateContainer = view.bindMultiState()
val multiStateContainer = view.bindMultiState() { multiStateContainer: MultiStateContainer ->
// 重试事件处理
}
MultiStateContainer multiStateContainer = MultiStatePage.bindMultiState(view)
MultiStateContainer multiStateContainer = MultiStatePage.bindMultiState(view, new OnRetryEventListener() {
@Override
public void onRetryEvent(MultiStateContainer multiStateContainer) {
// 重试事件处理
}
});
基础用法
val multiStateContainer = MultiStatePage.bindMultiState(this)
val multiStateContainer = MultiStatePage.bindMultiState(this) { multiStateContainer: MultiStateContainer ->
// 重试事件处理
}
拓展方法
val multiStateContainer = bindMultiState()
val multiStateContainer = bindMultiState() { multiStateContainer: MultiStateContainer ->
// 重试事件处理
}
MultiStateContainer multiStateContainer = MultiStatePage.bindMultiState(this);
MultiStateContainer multiStateContainer = MultiStatePage.bindMultiState(this, new OnRetryEventListener() {
@Override
public void onRetryEvent(MultiStateContainer multiStateContainer) {
// 重试事件处理
}
});
class MultiStateFragment : Fragment {
private lateinit var multiStateContainer: MultiStateContainer
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment, container, false)
multiStateContainer = MultiStatePage.bindMultiState(root) { multiStateContainer: MultiStateContainer ->
// 重试事件处理
}
//或者
multiStateContainer = root.bindMultiState() { multiStateContainer: MultiStateContainer ->
// 重试事件处理
}
return multiStateContainer
}
}
class JavaFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.activity_main, container, false);
MultiStateContainer multiStateContainer = MultiStatePage.bindMultiState(root);
return multiStateContainer;
}
}
<com.zy.multistatepage.MultiStateContainer
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.zy.multistatepage.MultiStateContainer>
// 重试事件
viewBinding.container.onRetryEventListener = OnRetryEventListener {
loadData()
}
multiStateContainer.show<XXXState>()
val state = XXXState()
multiStateContainer.show(state)
默认内置3种状态
val multiStateContainer = MultiStatePage.bindMultiState(view)
//成功页
multiStateContainer.show<SuccessState>()
//错误页
multiStateContainer.show<ErrorState>()
//空页面
multiStateContainer.show<EmptyState>()
//加载状态页
multiStateContainer.show<LoadingState>()
1.1.0新增 show(multiState: MultiState)
val lottieOtherState = LottieOtherState()
lottieOtherState.retry = {
Toast.makeText(this, "retry...", Toast.LENGTH_SHORT).show()
}
multiStateContainer.show(lottieOtherState)
multiStateContainer.show<ErrorState>{errorState ->
errorState.setErrorMsg("xxx出错了")
}
val multiStateContainer = MultiStatePage.bindMultiState(view){
Toast.makeText(context, "retry", Toast.LENGTH_SHORT).show()
}
class LottieWaitingState : MultiState() {
override fun onCreateMultiStateView(
context: Context,
inflater: LayoutInflater,
container: MultiStateContainer
): View {
return inflater.inflate(R.layout.multi_lottie_waiting, container, false)
}
override fun onMultiStateViewCreate(view: View) {
//逻辑处理
}
//是否允许重试
override fun enableReload(): Boolean = false
//指定重试 view
override fun bindRetryView(): View? {
return retryView
}
}
enableReload()
是否允许retry
回调 false
不允许
bindRetryView
绑定重试点击事件的view
默认为根view
结合ViewBidng
参考 demo
MultiStateBinding 和 WithBindingState
class LottieExtActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val multiStateContainer = bindMultiState()
multiStateContainer.show<LottieWaitingState>()
}
}
class App : Application() {
override fun onCreate() {
super.onCreate()
val config = MultiStateConfig.Builder()
.alphaDuration(300)
.errorIcon(R.mipmap.state_error)
.emptyIcon(R.mipmap.state_empty)
.emptyMsg("emptyMsg")
.loadingMsg("loadingMsg")
.errorMsg("errorMsg")
.build()
MultiStatePage.config(config)
}
}
method | 作用 |
---|---|
alphaDuration |
alpha动画时长 |
errorIcon |
错误状态默认图标 |
emptyIcon |
空数据状态默认图标 |
emptyMsg |
空数据状态默认提示信息 |
errorMsg |
错误状态默认提示信息 |
loadingMsg |
loading状态默认提示信息 |
可以借助kotlin的拓展函数封装常用的状态
fun MultiStateContainer.showSuccess(callBack: (SuccessState) -> Unit = {}) {
show<SuccessState> {
callBack.invoke(it)
}
}
fun MultiStateContainer.showError(callBack: (ErrorState) -> Unit = {}) {
show<ErrorState> {
callBack.invoke(it)
}
}
fun MultiStateContainer.showEmpty(callBack: (EmptyState) -> Unit = {}) {
show<EmptyState> {
callBack.invoke(it)
}
}
fun MultiStateContainer.showLoading(callBack: (LoadingState) -> Unit = {}) {
show<LoadingState> {
callBack.invoke(it)
}
}
调用
val multiStateContainer = bindMultiState()
multiStateContainer.showLoading()
multiStateContainer.showSuccess()
- 2.0.1(2021/03/06) fix 重复状态切换判断异常
- 2.0.0(2021/03/06) 支持xml中引用MultiStatePage, 代码优化
- 1.1.1(2021/01/12) 优化
enableReload
处理 - 1.1.0(2021/01/04) 新增
show(multiState: MultiState)
- 1.0.9(2020/12/24) demo 包名调整
enableReload
不强制实现,默认false
- 1.0.8(2020/12/09) 修复
LinearLayout
权重异常 - 1.0.7(2020/11/26) 小优化 移除部分
log
打印 - 1.0.6(2020/11/06) 优化
state
切换策略 保留原view
- 1.0.5(2020/11/04)
kotlin
函数类型参数更换为java interface
对java
的调用更友好 - 1.0.4(2020/11/04) api重命名
Activity
和View
统一为bindMultiState()
- 1.0.3(2020/10/26) 修复
state
内存泄漏, 移除register
函数 - 1.0.2(2020/10/23) 支持指定重试
view
, 支持ViewBinding
- 1.0.1(2020/09/22) 支持内置状态页信息配置, 支持
alpha
动画时长配置
- 支持xml中引用
如果对你有帮助的话可以点个star支持一下子 谢谢亲
本项目会长期维护 欢迎issue指正
Copyright (C) 2020. ZhaoYan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.