在我的一个应用程序中,我遇到一种情况:用户输入页面并显示进度条,直到服务器返回响应。如果服务器返回错误或用户没有互联网(或任何其他问题),则会显示 ImageView ,并在下面显示错误消息。这是我的问题:是否最好将带有 imageview 和错误消息的布局放入可见性=消失的 Activity 的常规布局 xml 中,然后在发生错误时使其可见,或者最好制作一个单独的layout.xml只是为了错误并在发生错误时对其进行 setcontentview 吗?如果我将 setcontentview 用于另一个布局,那么当新布局膨胀时,用户将看到白色闪烁,我不太喜欢这种情况。另一方面,将错误布局保留在常规布局内可能会产生内存损失普通用户通常看不到的东西。当然,还有第三种选择 - 以编程方式添加错误屏幕 - 但如果错误屏幕的布局更加复杂,那么就会出现复杂性问题。最有效的选择是什么?
伪代码如下:
<LinearLayout
android:id="@+id/mainLayout"
>
.. layout code
<LinearLayout
android:id="@+id/errorLayout"
android:visibility="gone"
>
</LinearLayout>
</LinearLayout>
编辑:我使用的最终解决方案涉及某些情况下 ViewStub 的组合(其中后台 Activity 不需要可见,但我不想在可能不显示的内容上消耗内存)和 DialogFragment(其中背景 Activity 需要以透明度显示)。这个问题在我认识的一些 Android 开发者中引发了一场激烈的线下辩论——其中一些人支持下面给出的 Activity 答案,因为它最能支持 Material 设计样式,而其他人则支持使用对话 fragment ,因为将 Activity 用于类似的事情这可能是多余的(额外的类,需要将其添加到 list ,重复的工具栏逻辑等)。感谢所有做出贡献的人。
第二次编辑:在进一步解决这个问题之后,我对dialogfragment解决方案不太确定。如果您在屏幕上显示错误,并且希望用户认为它是屏幕的有机部分,那么顶部工具栏必须是可单击的。对话框 fragment 使顶部工具栏可见,但对它的单击不会注册,因为即使对话框 fragment 的尺寸不占据整个屏幕,它仍然位于 fragment 管理器中“整个”屏幕上自己的层中,并窃取所有点击次数。我倾向于认为真正正确执行此操作的唯一方法是使用 View stub 。
最佳答案
使用 DialogFragment,它将出现在您的 Activity 上并显示错误。您可以为 fragment 设置自己的布局以及处理错误的代码。不要尝试在一个 xml 布局中编写所有可能向用户显示的内容。
How to use Dialog Fragment? (showDialog deprecated) Android
编辑:如果您想查找如何使dialogFragments全屏(即非 float ),请添加一些链接。
关于java - Android:实现错误屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133688/