Activity与Fragment通信,也就是我们常说的交互。
这里介绍两种方式
1.直接使用Activity中的对象,
MainActivity
//在MainActivity中,定义一个public权限的String变量
public String mainactivity_data;
fragment
String temp = ((MainActivity) getActivity()).mainactivity_data;
这样,就可以使用MainActivity中的数据,前提是MainActivity中的对象权限不能为private。
当然,这样写会导致fragment耦合度较高,如果在其他Activity中嵌入上述fragment,那么MainActivity是没有实例的。
第二种方式
接口回调
我们先在fragment里定义一个接口
interface OnDataInterFace {
String onSuccess(String msg);
}
//并在该类里声明该接口作为全局对象
OnDataInterFace onDataInterFace;
然后重写该类的onAttach方法
@Override
public void onAttach(Context context) {
super.onAttach(context);
onDataInterFace = (OnDataInterFace) context;
Log.e("MYFragment", onDataInterFace.onSuccess("这是从Fragment传过来的"));
}
可以看到,调用success方法传入相应参数,当其他Activity使用该fragment类时会得到这个参数。
首先我们要在Activity implement在fragment中写的接口
public class MainActivity extends Activity implement FragmentThree.OnDataInterFace{
//覆写该方法
@Override
public String onSuccess(String msg) {
Log.e("MYTAGMainActivity2", msg);
return "这是从MainActivity传过来的";
}
}
msg为fragment传过来的数据,return String可以将String数据传到fragment中去,在fragment里直接接受就好
Log.e("MYTAGFragmentThree", onDataInterFace.onSuccess("这是从FragmentThree传过来的"));
调用onDataInterFace.onSuccess(“这是从FragmentThree传过来的”)就可以了。最终结果LogCat会
在MainActivity里打印fragment传入的数据,fragment相反