首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Fragment间通信传递数据 Communicating with Other Fragments

Fragment间通信传递数据 Communicating with Other Fragments

作者头像
张拭心 shixinzhang
发布2022-05-06 18:52:21
发布2022-05-06 18:52:21
36500
代码可运行
举报
运行总次数:0
代码可运行

需求: 一个Activity中显示两个Fragment,想要在FragmentA中点击某个按钮时,切换到FragmentB,同时把用户输入的数据传递到B中。

思路: Fragment的显示与否决定权在Activity里,想要传递数据就得通过这个“媒婆”,两个Fragment不应该直接通信。

方法:(其实这里就是一个回调的概念。)

1。先在FragmentA中定义一个接口,例如:

代码语言:javascript
代码运行次数:0
运行
复制
    /**
     * 注册成功后回调,用于传递数据至登录
     */
    public interface OnRegisterSuccessListener {
        void onRegisterSuccess(String phoneNumber);
    }

2。 然后在A中创建一个OnRegisterSuccessListener接口的对象,在按钮的点击事件里调用对象的onRegisterSuccess方法,并传入数据phoneNumber;

代码语言:javascript
代码运行次数:0
运行
复制
    if (status == 0) {
        registerResult = "注册成功!";
                              mOnRegisterSuccessListener.onRegisterSuccess(phoneNumber);
                }

3。哦差点忘了实例化这个对象,我们 需要重写onAttach方法,在Activity与Fragment绑定时实例化(抛出的那个异常是为了在Activity没有实现接口时给个提醒)

代码语言:javascript
代码运行次数:0
运行
复制
 @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mOnRegisterSuccessListener = (OnRegisterSuccessListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                + "must implement OnRegisterSuccessListener!");
        }

    }

4。控制Fragment的Activity实现这个接口,并且实现回调方法:

代码语言:javascript
代码运行次数:0
运行
复制
public class LoginActivity extends Activity implements RegFragment.OnRegisterSuccessListener

5。在实现回调方法里将A传递过来的数据用Bundle传递到FragmentB中:

代码语言:javascript
代码运行次数:0
运行
复制
@Override
    public void onRegisterSuccess(String phoneNumber) {
        LogFragment logFragment = new LogFragment();
        Bundle bundle = new Bundle();
        bundle.putString("phoneNumber",phoneNumber);
        logFragment.setArguments(bundle);

        getFragmentManager().beginTransaction().replace(R.id.container, logFragment).commit();
    }

6。最后一步,在FragmentB中接收数据:

代码语言:javascript
代码运行次数:0
运行
复制
 Bundle bundle = getArguments();
        if (bundle != null){
            String phoneNumber = bundle.getString("phoneNumber");
            if (!TextUtils.isEmpty(phoneNumber)) {
                etNumber.setText(phoneNumber);
            }
        }else {
            LogUtils.e(TAG,"Bundle is null !");
        }

7。这样就实现了2个Fragemnt间的数据通信。

学习地址:Communicating with Other Fragments

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档