一个Activity可以包含多个Fragment,如果有需要让其中的Fragment关联起来,第一个Fragment里的数据会影响到第二个Fragment的显示,那么就需要Fragment之间能够进行通信。Fragment之间不能直接进行通信,需要借助宿主Activity来进行,Activity作为“数据传输与交换机”,连接多个Fragment。
要实现两个Fragment之间的通信需要三步:
1.在需要传输数据的Fragment里定义接口。(回调接口规定与Activity之间的数据传输方式)
public interface OnMainItemSelectedListener {
public void onMainItemSelected(int position);
}
2.在宿主Activity中实现Fragment里定义的接口。(对Fragment传过来的数据如何处理,包括是否传给其他Fragment)
public void onMainItemSelected(int position) {
System.out.println("onMainItemSelected-->position:"+position);
ItemListFragment fragment = new ItemListFragment();
Bundle args = new Bundle();
args.putInt("position",position);
fragment.setArguments(args);
fragmentManager.beginTransaction().replace(R.id.fragment_container,fragment).commit();
}
3.在Fragment的onAttach()方法里实例化接口变量,并在需要的地方调用回调接口里的方法。
OnMainItemSelectedListener mCallback;@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnMainItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()+ " must implement OnMainItemSelectedListener");
}
} 在需要传输数据地方调用:
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
mCallback.onMainItemSelected(position);
}在本例中,在所接受数据的Fragment里使用如下代码即可接受position:
int position = getArguments().getInt("position");这里就完成了数据从一个Fragment通过Activity传到另一个Fragment里。
本文阐述了在Android应用中实现Fragment间数据通信的方法,包括定义接口、在宿主Activity中实现接口以及Fragment间的调用过程,实现了数据从一个Fragment通过Activity传到另一个Fragment的功能。
16万+

被折叠的 条评论
为什么被折叠?



