在片段中更改方向后更新布局

时间:2016-08-01 14:15:13

标签: android android-fragments android-asynctask

美好的一天,

我正在开发一个应用程序,它将作为某种类型的驱动程序监视器。无论设备的方向如何,我的客户都希望应用程序能够正常工作。

我实现了提供in the following article的解决方案,在调试器稍微调整一下之后,我可以看到Asynctask仍在工作。但是,它应该处理的TextViews和ImageViews不再起作用了。

以下是我TaskFragment的代码。

澄清:AsyncTask仍然正确地接收和处理元素,但布局的元素不再更新。我想知道如何让他们继续工作。

2 个答案:

答案 0 :(得分:0)

我建议使用AsyncTaskLoader,因为它们可以相对容易地重新连接到您创建它的任何生命周期元素。见这里:https://developer.android.com/reference/android/content/AsyncTaskLoader.html

首先实现它似乎非常复杂,但是如果你阅读https://developer.android.com/guide/components/loaders.html,那么大部分的怪异都应该被清理掉。

TLDR:使用AsyncTaskLoader可以让AsyncTask在销毁和重新创建后重新连接到您的片段。您只需要在片段的onCreate中调用getLoaderManager()。initLoader(...)。

答案 1 :(得分:0)

好的,所以我找到了一个(可能不是很有效)的解决方法,但仍然是一种解决方法。

问题在于,在方向更改之后,由于活动被销毁并重新创建,因此变量batterymonitor,valuemonitor等不会指向由于布局/活动更改而创建的新对象。

作为一个解决方案,我现在每次需要对布局进行操作时都使用findViewById。这样,id会被永久刷新,以跟上设备旋转时的活动变化。

我用来做的丑陋行是:

batteryMonitor = (ImageView)getActivity().findViewById(R.id.batteryMonitor);                              
batteryMonitor.setImageResource(R.drawable.no_battery);