Android: 实现错误屏幕
Android: implementing an error screen
在我的一个应用程序中,我遇到这样一种情况:用户进入页面并显示进度条,直到服务器 returns 响应。如果服务器 returns 出现错误或用户没有互联网(或任何其他问题),则会显示图像视图,并在下方显示错误消息。这是我的问题:是否最好将带有 imageview 和错误消息的布局放在常规布局 xml 中,以便 activity 可见性 = 消失,然后在发生错误时使其可见,或者是更好地为错误制作一个单独的 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 设计样式,而其他人谁支持使用 dialogfragment,因为对这样的东西使用 activity 可能有点矫枉过正(额外的 class,需要将其添加到清单,复制工具栏逻辑等)。感谢所有做出贡献的人。
第二次编辑:在进一步解决这个问题之后,我对 dialogfragment 解决方案不太确定。如果您在屏幕上显示错误并且您希望用户认为它是屏幕的有机部分,那么顶部工具栏必须是可点击的。 dialogfragment 使顶部工具栏可见,但点击它不会被注册,因为即使 dialogfragment 的尺寸不占据整个屏幕,它仍然位于 fragmentmanager "whole" 屏幕上的自己的层中并窃取所有的点击。我倾向于认为真正正确执行此操作的唯一方法是使用 viewstub。
我真的建议您启动一个全新的 Activity
,因为这是更好的做法,而且更干净,而不是在一个 Activity
的背景中有很多不可见的项目。您也真的不想调用 setContentView() 并将新布局应用于您的原始 Activity
。您可以启动新的 Activity
并通过 intent 附加单个错误消息:
Intent intent = new Intent(this, ErrorActivity.class);
String errorMessage = "This is a custom error message.";
intent.putExtra("errorMessage", errorMessage);
startActivity(intent);
然后在 ErrorActivity
中,您可以收到如下特定的错误消息:
String errorMessage = getIntent().getExtras().getString("errorMessage");
然后你会想要在 ErrorActivity
的 onCreate() 中的 TextView
中显示它:
TextView errorText = (TextView) findViewById(R.id.errorText);
errorText.setText(errorMessage);
希望这对您有所帮助,但如果您有任何问题,请随时咨询。
使用 DialogFragment,它会出现在您的 activity 上并显示错误。您可以为片段设置自己的布局,并编写代码来处理错误。不要试图在一个 xml 布局中编写您可能向用户显示的所有可能的内容。
How to use Dialog Fragment? (showDialog deprecated) Android
编辑:如果您想查找如何使 dialogFragments 全屏显示(即非浮动),请添加一些链接。
Full Screen DialogFragment in Android
在我的一个应用程序中,我遇到这样一种情况:用户进入页面并显示进度条,直到服务器 returns 响应。如果服务器 returns 出现错误或用户没有互联网(或任何其他问题),则会显示图像视图,并在下方显示错误消息。这是我的问题:是否最好将带有 imageview 和错误消息的布局放在常规布局 xml 中,以便 activity 可见性 = 消失,然后在发生错误时使其可见,或者是更好地为错误制作一个单独的 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 设计样式,而其他人谁支持使用 dialogfragment,因为对这样的东西使用 activity 可能有点矫枉过正(额外的 class,需要将其添加到清单,复制工具栏逻辑等)。感谢所有做出贡献的人。
第二次编辑:在进一步解决这个问题之后,我对 dialogfragment 解决方案不太确定。如果您在屏幕上显示错误并且您希望用户认为它是屏幕的有机部分,那么顶部工具栏必须是可点击的。 dialogfragment 使顶部工具栏可见,但点击它不会被注册,因为即使 dialogfragment 的尺寸不占据整个屏幕,它仍然位于 fragmentmanager "whole" 屏幕上的自己的层中并窃取所有的点击。我倾向于认为真正正确执行此操作的唯一方法是使用 viewstub。
我真的建议您启动一个全新的 Activity
,因为这是更好的做法,而且更干净,而不是在一个 Activity
的背景中有很多不可见的项目。您也真的不想调用 setContentView() 并将新布局应用于您的原始 Activity
。您可以启动新的 Activity
并通过 intent 附加单个错误消息:
Intent intent = new Intent(this, ErrorActivity.class);
String errorMessage = "This is a custom error message.";
intent.putExtra("errorMessage", errorMessage);
startActivity(intent);
然后在 ErrorActivity
中,您可以收到如下特定的错误消息:
String errorMessage = getIntent().getExtras().getString("errorMessage");
然后你会想要在 ErrorActivity
的 onCreate() 中的 TextView
中显示它:
TextView errorText = (TextView) findViewById(R.id.errorText);
errorText.setText(errorMessage);
希望这对您有所帮助,但如果您有任何问题,请随时咨询。
使用 DialogFragment,它会出现在您的 activity 上并显示错误。您可以为片段设置自己的布局,并编写代码来处理错误。不要试图在一个 xml 布局中编写您可能向用户显示的所有可能的内容。
How to use Dialog Fragment? (showDialog deprecated) Android
编辑:如果您想查找如何使 dialogFragments 全屏显示(即非浮动),请添加一些链接。
Full Screen DialogFragment in Android