qyxxjd/MultipleStatusView

显示视图有BUG

popa101 opened this issue · 10 comments

一开始显示loading_view,后 再显示empty_view, loading_view没有关闭, 两个view重叠了. 没有关闭view的方法

确实有这个bug,失望修复下

不同状态的ID有没有按规则设置?代码贴出来看一下

loadingView的id 为-1,猜测可能跟名字与其他框架重名有关
解决:
showLoading 方法处添加: if (view.getId() == -1) {
mLoadingView.setId(R.id.loading_view);
}

解决办法二:
showViewById更改为这种方式
private void showViewById(View view) {
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
View view1 = getChildAt(i);
view1.setVisibility(View.GONE);
}
view.setVisibility(VISIBLE);
}

今天在改代码时也出现了这个bug,给视图的根布局设置一个id就可以了。否则getId拿到的是-1.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/empty_view"
    ...>
    ...
</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/error_view"
    ...>
    ...
</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/loading_view"
    ...>
    ...
</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/no_network_view"
    ...>
    ...
</FrameLayout>

四种自定义布局文件按上面的格式设置对应的 ID,这样也会重叠? @gituserboy @lindroy

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/empty_view"
    ...>
    ...
</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/error_view"
    ...>
    ...
</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/loading_view"
    ...>
    ...
</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/no_network_view"
    ...>
    ...
</FrameLayout>

四种自定义布局文件按上面的格式设置对应的 ID,这样也会重叠? @gituserboy @lindroy

这样不会,但是我昨天在库里加了一个need_login.xml布局,根布局没有设置Id,getId()时的值就是-1,出现了重叠。

我那个已解决,就是id得按 文档那样写死就好了

请仔细阅读 README 注意事项部分

注意事项

必须按如下规则设置对应视图根节点的 view id,否则会导致试图重叠
必须按如下规则设置对应视图根节点的 view id,否则会导致试图重叠
必须按如下规则设置对应视图根节点的 view id,否则会导致试图重叠

1. 如果使用自定义属性

app:emptyView="@layout/..."
app:errorView="@layout/..."
app:loadingView="@layout/..."
app:noNetworkView="@layout/..."

需要设置:

  • 加载中视图的id必须为:loading_view
  • 空视图的id必须为:empty_view
  • 错误视图的id必须为:error_view
  • 无网络视图的id必须为:no_network_view
  • 自定义提示文本的id必须为:status_hint_content

2. 如果需要点击某个 view 进行重试, 需要设置:

  • 空视图内对应的view id:empty_retry_view
  • 错误视图内对应的view id:error_retry_view
  • 无网络视图内对应的view id:no_network_retry_view

因为view我是new出来,未配置相关id。谢谢您的回复