Fragment依赖于Activity,那么它们之间的通信就必须要涉及。通过自己的寻找和实践,知道了Fragment和Activity之间的通信方案大概有5种,各有优缺点,用哪个方案看需求吧。
- setArguments(Bundle args)
- Handler
- Broadcast广播
- EventBus
- 接口回调
上代码,开始分析。自己写了个小Demo:Fragment通信Demo ,里边有上边前4种通信方式。
demo中1、2、3为activity->fragment,2、3若要fragment->activiy则相关代码调换位置即可。4包含双向通信。
一、 setArguments(Bundle args)
此方式还挺简单的,貌似是谷歌官方推荐的一种数据传递方式,如果遇到内存重启,系统会自动保存数据,和Activity中的Intent一个原理。
用Android Studio新建一个Fragment时,会自带一个函数:
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment Fragment1.
*/
// TODO: Rename and change types and number of parameters
public static Fragment1 newInstance(String param1, String param2) {
Fragment1 fragment = new Fragment1();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
//保存数据
fragment.setArguments(args);
return fragment;
}
在Activity中新建Fragment实例的时候,直接传入想要传送的数据。