Fragment的含义,作用,生命周期,使用方法,Fragment管理请查看上篇文章Fragment总结(一)。这篇文章主要是介绍Activity和Fragment之间通信,Fragment和Fragment之间通信。
Activity和Fragment之间通信
1.Activity和Fragment互相调用各自的方法实现交互:
(1)在Activity中调用Fragment的方法:
通过getActivity()获取所附属的Activity,可以调用其相关方法。
DynamicAddActivity activity = (DynamicAddActivity) getActivity();
activity.showToast();
(2)在Fragment中调用Activity的方法:
通过FragmentManager获取相对应的Fragment,可以调用其相关方法。
if(oneFragment == null){
oneFragment = new OneFragment();
transaction.add(R.id.container, oneFragment);
} else {
transaction.show(oneFragment);
}
oneFragment.showToast(DynamicAddActivity.this);
2.通过回调接口实现通信:
在Fragment中声明一些回调接口,当Fragment调用onAttach时,将这些回调接口实例化,Fragment可以调用各个activity的成员函数了,Activity必须implements这些接口,实现Activity和Fragment之间通信。
下面是一个非常简单的例子,以此来进行说明:
Fragment中定义一个接口实例化,点击按钮时调用:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.one_fragment, null);
one_fragment_btn = (Button)view.findViewById(R.id.one_fragment_btn);
one_fragment_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {//点击按钮时调用回调方法
Boolean flag = listener.callback("test");//调用接口
if(flag){
Toast.makeText(getActivity(), "成功", Toast.LENGTH_LONG).show();
}
}
});
return view;
}
//回调接口
public interface CallBackListener{
boolean callback(String text);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
listener = (CallBackListener) context;//实例化接口
} catch (ClassCastException e){
}
}
Activity中实现接口:
//实现回调接口
@Override
public boolean callback(String text) {
if("test".equals(text)){
return true;
}
return false;
}
Fragment和Fragment之间通信
Fragment之间不能直接通信,需要通过Activity来实现Fragment之间通信,不再举例进行说明。