通过Activity传递
画面显示(XML)
首先这是一个Activit显示上有两个Fragment容器,是为了显示两个Fragment。
然后Activity加载了两个Fragment的数据并依次replace到了两个容器中。
此时Activity就有了两个Fragment的对象,方便后续FragmentA获取FragmentB。
逻辑代码(Java)
在FragmentA和FragmentB中设置一个setData方法去改动一些TextView什么的。
然后最重要的一步!!
1)用getActivity()方法获取Activity的实例对象。
2)通过这个Activity对象去获取另一个Fragment的对象,通过findFragmentById/findFragmentByTag找到指定的另一个Fragment,或者Fragment作为Activity的公有成员变量直接使用。
3)然后再通过此FragmentB对象去调用Fragment的setData()方法,就可以从A传递给B数据了。
所以一个FragmentA先拿到其Activity对象,再通过这个Activity找到指定的FragmentB对象,然后调用其B方法,从而A传递B数据。
通过接口传递数据
目的:FragmentA想要发送数据给B。
在FragmentA中设置接口以及接收接口参数,和成员变量。
//保存FragmentB传来的接口对象 private OnFragmentChangeInfo mOnFragmentChangeInfo; //设置公有方法,让FragmentB调用 public void SetOnFragmentChangeInfo(OnFragmentChangeInfo info){ this.mOnFragmentChangeInfo=info; } //重写此接口的FragmentB需要什么数据就设置什么数据 interface OnFragmentChangeInfo{ void String message(String data); }
1)先让FragmentB获得FragmentA的实例对象,才能调用SetOnFragmentChangeInfo()方法和OnFragmentChangeInfo接口。
真正实现:是在FragmentB重写OnFragmentChangeInfo接口。
((FragmentA)fragment).setSetOnFragmentChangeInfo(new OnFragmentChangeInfo{ @Override public void message(String data){ tv.setText(data); } });
2)此时B传给A了一个接口对象,并保存在mOnFragmentChangeInfo字段中。
//什么时候想要传给B就什么时候调用 mOnFragmentChangeInfo.message("我传过去数据咯,其他我不管咯,逻辑什么的你自己搞定");
3)这时调用传过来的对象的message方法,即可向B传数据。