Fragment参数传递(一)

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

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

这里写图片描述

点击按钮,跳转到第二个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回传参数使用回调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值