KingJA / LoadSir

A lightweight, good expandability Android library used for displaying different pages like loading, error, empty, timeout or even your custom page when you load a page.(优雅地处理加载中,重试,无数据等)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

注册view布局时会出现问题

hegaojian opened this issue · comments

如题,首先我在 Application中注册了

 LoadSir.beginBuilder()
            .addCallback(LoadingCallback())//加载
            .addCallback(ErrorCallback())//错误
            .addCallback(EmptyCallback())//空
            .setDefaultCallback(SuccessCallback::class.java)//设置默认加载状态页
            .commit()

在BaseActivity中,我的根界面XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorBackGround"
    android:orientation="vertical">

    <ViewStub
        android:id="@+id/vsToolBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout="@layout/layout_toolbar" />

    <FrameLayout
        android:id="@+id/baseContentView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

layoutId是子activity传递的布局Id,在BaseActivity的 onCreate生命周期中,我调用了initStatusViewf方法,然后注册 baseContentView

private fun initStatusView() {
        baseContentView.addView(LayoutInflater.from(this).inflate(layoutId, null))
        uiStatusManger = LoadSir.getDefault().register(baseContentView) {
            //点击重试时触发的操作
            uiStatusManger.showLoading()
            onLoadRetry()
        }
    }

现在的问题是,进入子Activity,在oncreated 方法中 我主动设置错误界面 空界面 加载界面都会无效,界面会展示一个成功界面的布局,我后面在稍等一会去设置他为 错误界面 空界面 加载界面都是没问题了,就首次会无效
我看了下是因为 在LoadService类中 你注册时设置了一个默认的defalutCallback,在这个区间,我也设置了一个 错误 空 加载界面时就会被你的给覆盖掉

 private void initCallback(LoadSir.Builder builder) {
        List<Callback> callbacks = builder.getCallbacks();
        final Class<? extends Callback> defalutCallback = builder.getDefaultCallback();
        if (callbacks != null && callbacks.size() > 0) {
            for (Callback callback : callbacks) {
                loadLayout.setupCallback(callback);
            }
        }
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                if (defalutCallback != null) {
                    loadLayout.showCallback(defalutCallback);
                }
            }
        });

    }

现在我只能延迟我的 init方法去暂时解决,目前设置了60毫秒延迟加载,不知道作者是否有更好的解决方式呢