美好的一天,
我正在开发一个应用程序,它将作为某种类型的驱动程序监视器。无论设备的方向如何,我的客户都希望应用程序能够正常工作。
我实现了提供in the following article的解决方案,在调试器稍微调整一下之后,我可以看到Asynctask仍在工作。但是,它应该处理的TextViews和ImageViews不再起作用了。
以下是我TaskFragment的代码。
澄清:AsyncTask仍然正确地接收和处理元素,但布局的元素不再更新。我想知道如何让他们继续工作。
答案 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);