使用Bundle+Message+Handler实现Fragment与Activity通信(可互传数据互调用方法)

需求

  Fragment中监听到组件事件后,将相应的参数封装后传递给Activity,同时调用Activity中某个方法

实现思路

  1. Fragment中使用Bundle对欲传递的多个数据进行打包,生成Bundle对象。同时,创建Message对象,设置Message对象的数据源为打包后的Bundle对象,设置Message对象的what字段以便提取message时进行识别。
  2. Activity中定义一个Handler,接收Fragment传递过来的Message对象,提取Message对象中的Bundle对象,取得Bundle中的数据,调用想调用的某个方法。

实现代码

Fragment中:

private void SetListeners(){
   // 设置分析按钮监听
   analyseBtn.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
           // 创建Message及Bundle对象
           Message msg = new Message();
           Bundle bundle = new Bundle();
           // bundle填充数据
           bundle.putInt("age",age);
           bundle.putFloat("height",height);
           bundle.putFloat("weight",weight);
           bundle.putFloat("OGTT",ogtt);
           // 设置msg的what字段及数据源
           msg.what = 1;
           msg.setData(bundle);
           // 发送Message
           handler.sendMessage(msg);
       }
   })
}

Activity中:

// 定义一个Handler用于接收Fragment给Activity发出来的指令
@SuppressLint("HandlerLeak")
public Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        if(msg!=null){
            switch (msg.what) {
                // 根据what字段辨识出消息
                case 1:
                    // 取出数据包,解包得数据
                    Bundle bundle = msg.getData();
                    age = bundle.getInt("age");
                    weight = bundle.getFloat("weight");
                    height = bundle.getFloat("height");
                    ogtt = bundle.getFloat("OGTT");

                    // 此处调用Activity中你想调用的方法
                    AnalyseDIAB(age,height,weight,ogtt);
                    break;

                default:
                    break;
            }
        }
    }
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值