在Fragment之间传递参数时,有两种情况:
第一种情况:同一个container中不同fragment间的参数传递。这种情况一般发生在fragment跳转时,上一个Fragment将参数传递给下一个Fragment。
第二种情况:同一个Activity中,不container间Fragment的参数传递。

本篇先来介绍第一种情况,第二种情况将在下篇介绍

Fragment参数传递(一)_ide

点击按钮,跳转到第二个fragment,并且把文本框的内容作为参数传递过去,下面红色的文字用于展示从第二个fragment传回来的值
可以看到我们把值已经传过来的,然后我们点击一个按钮,退出当前的fragment
可以看到我们可以监听到了点击的是哪个按钮,也就是说我们得到了第二个fragment传过来的数据。

代码如下:

public class FragmentOne extends Fragment {

private EditText editText;
private Button button;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container,false);
button = (Button) view.findViewById(R.id.bt);
editText = (EditText) view.findViewById(R.id.edittext);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTwo two = FragmentTwo.newInstance(editText.getText().toString());
//注册回调接口
two.setResultListener(new OnButtonChooseListener() {
@Override
public void onButtonChoosed(String name) {
TextView tView = (TextView) getView().findViewById(R.id.tv1);
tView.setText(name);
}
});
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.fl_main, two);
//将第二个fragment添加到返回栈,否则不能执行出栈操作
transaction.addToBackStack(null);
transaction.commit();
}
});
return view;
}
}
public class FragmentTwo extends Fragment implements OnClickListener{

private TextView textView;
//声明接口对象
private static OnButtonChooseListener mlistener;
private Button bt1;
private Button bt2;
private Button bt3;
//定义回调接口
public interface OnButtonChooseListener{
//回调函数
public void onButtonChoosed(String name);
}
/**
* 提供一个方法,为声明的接口对象赋值,在其他类中使用本类的时候,
* 调用这个方法
*/
public void setResultListener(OnButtonChooseListener listener){
mlistener = listener;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2, container,false);
bt1 = (Button) view.findViewById(R.id.bt1);
bt2 = (Button) view.findViewById(R.id.bt2);
bt3 = (Button) view.findViewById(R.id.bt3);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
bt3.setOnClickListener(this);
textView = (TextView) view.findViewById(R.id.content);
if(getArguments()!=null){
textView.setText(textView.getText()+getArguments().getString("name"));
}
return view;
}
public static FragmentTwo newInstance(String text){
FragmentTwo two = new FragmentTwo();
Bundle bundle = new Bundle();
bundle.putString("name", text);
two.setArguments(bundle);
return two;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt1:
//当外部调用了回调函数时,会调用这个方法
mlistener.onButtonChoosed("按钮1");
break;
case R.id.bt2:
mlistener.onButtonChoosed("按钮2");
break;
case R.id.bt3:
mlistener.onButtonChoosed("按钮3");
break;
}
//当前fragment出栈
getFragmentManager().popBackStack();
}
}

最后总结一下同一个container中fragment跳转时如何传递参数:
fragment1向fragment2传递参数使用setArguments,至于为什么使用setArguments方法,请看我的另一篇博客​​如何向一个Fragment传递参数—setArguments方法的介绍​​

fragment2向fragment1回传参数使用回调