我有一个viewpager片段设置,我在活动开始时运行AsyncTask来从JSON get中加载一些数据(它提取的数据只需要执行一次,所有片段都将使用它)。我遇到的问题是我想从AsyncTask中获取这些数据,并将其作为所有文本视图从片段中提取的数据。
从AsyncTask加载数据然后让片段引用该数据的最佳方法是什么。你不能让视图引用来自get-go的数据,因为它是Nullpointers,我真的想避免在AsyncTask的OnPostExecute中引用每个单独的textview,如果我在Parent Activity中有它。
答案 0 :(得分:3)
只需从视图中分离数据存储即可。通过这种方式,处理数据下载并在获取完成后将其显示在各种片段中将更容易。
基本思想是:在与活动(服务或意图服务)分离的后台线程中启动下载,然后将数据更新为存储(sqllite,如果它是复杂的,共享首选项,甚至单个对象,即使我不喜欢后一种方法。)
执行get后,通知片段数据可用。不过,你在这里有很多选择。如果您决定在服务中托管线程/ asynctask,您可以绑定回调,然后通知所有感兴趣的片段,您可以使用可以使用本地广播接收器拦截的(本地)广播消息,或者您甚至可以使用消息总线,如otto。
最后,我真的建议使用intent服务来执行异步作业。这是执行任何 one-shot 操作的最简单方法,无需处理服务创建和/或活动配置更改。
答案 1 :(得分:0)
不确定这是否是“最佳”方式,但我首先想到的是着名的观察者模式。
Observer
的接口创建一个名为Fragment
的接口
通知()List
中实施此界面Observer
AsyncTask
个onPostExecute()
个对象
List
中,遍历此Observer
并在每个Fragment
上调用notify(),并传递相应的数据这是对此解决方案的一个非常粗略的描述,但我希望你明白这一点。