Android fragments 将数据从MainActivity中的AsyncTask发送到Fragment?
我一整天都在寻找解决办法。但没有解决办法奏效 我的Android fragments 将数据从MainActivity中的AsyncTask发送到Fragment?,android-fragments,android-asynctask,Android Fragments,Android Asynctask,我一整天都在寻找解决办法。但没有解决办法奏效 我的main活动中有AsyncTask。在main活动中我在ViewPager中有两个片段 我想从MainActivity的AsyncTask向这两个片段发送JSON字符串 当我尝试以片段形式接收字符串时,问题就出现了 我在创建的活动和创建的视图中尝试了它 我尝试过的解决方案是: 通过bundle参数接收 Bundle bundle = this.getArguments(); result = bundle.getString("json"); r
main活动中有AsyncTask
。在main活动中
我在ViewPager中有两个片段
我想从MainActivity的AsyncTask向这两个片段发送JSON字符串
当我尝试以片段形式接收字符串时,问题就出现了
我在创建的活动和创建的视图中尝试了它
我尝试过的解决方案是:
通过bundle参数接收
Bundle bundle = this.getArguments();
result = bundle.getString("json");
result = getArguments().getString("json");
通过返回全局变量(结果)的函数进行接收-
MainActivity activity = (MainActivity) getActivity();
result = activity.getMyData();
我还尝试实现Communicator,但我没有标记或ID链接到activity_main.xml中的片段 异步任务完成后,您需要传递回调
public interface TaskListener{
public void onResultAvailable(Result result);
}
private MyTask extends AsyncTask{
private List<TaskListener> myListeners = new ArrayList<TaskListener>();
public void addListener(TaskLister tl){
myListeners.add(tl);
}
@Override
protected void onPostExecute(Result result){
super.onPostExecute(result).
for(TaskListener tl : myListeners){
tl.onResultAvailable(result);
}
myListeners.clear();
}
}
现在有了一个frament,它可以处理AsyncTask结果,但它还必须“订阅”AsyncTask。因此,您可以在执行任务之前将片段作为侦听器添加到任务中
public class MainActivity extends Something{
public void onStart(){
MyFragment fragment = findFragment();
MyTask task = createTask();
task.addListener(fragment);
execute(task);
}
}
在过去的6-7天里,我尝试了几乎所有可能的在线解决方案。经过长时间的研究和尝试,我能够自己解决我的问题。(奇怪的是,这里没有得到太多的回应)
我使用了List
并将片段创建为fragments=newvector()代码>。我在onPostExecute()
中接收到来自AsyncTask
的结果后添加了片段,并通过此方法将我的字符串参数以捆绑方式传递
public static Fragment instantiate (Context context, String fname, Bundle args)
然后我通过onCreateView
方法中的getArguments()
在两个片段中接收到参数
我做我需要做的事。谢谢你的回答,我希望这个答案能帮助别人
我意识到,问题在于,当接收和访问从MainActivity传递的数据时,无论数据是来自接口方法还是片段内的公共方法,这些片段是从MainActivity中相同片段的对象调用的。所有这些解决方案都抛出了NullPointerException。AsyncTask做什么,什么时候做?它是在创建片段之前执行的吗?我已经尝试过两种方式执行它,在创建片段之前和之后。AsyncTask从链接获取json值。然后将它们传递给片段。它是否像通信器接口一样工作?我从未见过或使用过这个。你能再描述一下吗?我是初学者。在将其放入MainActivity后,是否需要从片段调用其函数?这不是一个类或组件,它是android sdk的一部分。我使用了一种非常常见的软件设计模式:[观察者]。我将在示例中详细介绍……我现在已经开始理解这一点。但是我不明白您在MainActivity的onStart()中做了什么。我不知道,在MainActivity的生命周期中,异步任务是在什么时候启动的。我猜这是在onStart()期间发生的,因此我将任务的创建和执行放在那里。findFragment()方法只是一个占位符,您可以在其中从视图中调用片段。execute()方法是一个占位符,用于启动任务执行。它的意思是像伪代码一样,以您喜欢的方式执行实际的实现。重要的代码行是task.addListener(fragment);是的,我抓到你了。现在,实现这一点仍然存在一个问题。如何找到碎片?正如我提到的,我在activity_main中没有任何标记,因为我是通过ViewPage和FragmentStatePagerAdapter类实现它的。我还有两个片段布局。谢谢你的帮助。我知道我要求很多。
public static Fragment instantiate (Context context, String fname, Bundle args)