0

我的应用需要先加载一些 JSON,然后才能在 UI 上显示任何内容,JSON 决定了应用应该如何主题化。

虽然我通常不喜欢它们,但需要启动屏幕/加载屏幕,这样用户就不必看到界面的每个元素改变颜色等。但是我的问题是,当我加载我的应用程序时,我可以在我的进度对话框启动前几秒钟查看默认样式。我可以看到默认的深色渐变全息背景,以及包含我的应用标题的操作栏。如果我在 XML 中隐藏操作栏,则以后无法将其重新添加,并nullpointerexceptions在对其进行操作时获取。

onCreate()什至在设置我AsyncTaskonPreExecute().

理想情况下,我希望能够在应用程序启动时立即显示加载对话框,或者如果确实需要延迟,我只想让用户看到黑色背景。

有没有我没有提到的完全不同的方法?

谢谢。

4

2 回答 2

1

我实际上会考虑在这里使用片段。您可以为初始屏幕创建一个片段,并在您的活动首次开始时加载该片段。然后,一旦您的 json 加载/解析完成,您可以使用 FragmentTransaction 将您的第二个“屏幕”作为第二个片段加载,并让它替换您的加载屏幕。这也可以让你做一些漂亮的过渡动画。

This could be similarly done with the comment from njzk2, with two separate Activities. Essentially, you would do your parsing AsyncTask during the 'loading activity' and store the result as either a serializable object that could be passed to your other activity using an Intent extra or you could store the json into the SharedPreferences dictionary and reference that in your second activity.

You might also find that this is something you don't have to do every start up. If so, you should save either the serializable to disk so you can skip parsing or to the shared preferences so you can reference it there if it exists.

于 2013-02-15T15:37:37.130 回答
0

您看到的是根据您的主题主题的空活动。因此,您无能为力 - 如果引导活动需要一些时间,它将显示出来。

你可以做的是在你的活动上设置特殊的主题,将splash-image设置为windowBackground(窗口装饰视图的背景),如果你不需要它,稍后删除背景。

<style name="SplashScreenActivityTheme" parent="android:Theme.Light.NoTitleBar">
        <item name="android:windowBackground">@drawable/splash_image</item>
</style>

有关它的更多信息,您可以在 Cyril Mottier 的新帖子中阅读

还有一点需要注意:android 通常不使用闪屏。如果您的设计师不反对,您可以使用一些进度指示器,例如 ProgressBar 或其他东西

于 2013-02-15T15:29:57.163 回答