activity和activity之间传递对象,fragment和fragment之间传递对象的方法

activity和activity之间传递对象,fragment和fragment之间传递对象的方法,当然从activity向fragment传递对象同样可以用。由于activity是不能new出来一个对象去调用 方法的,所以。我们就需要借助于handler来传递。但是handler本身也是不能传递对象的。但可以用Messenger来传递handler    把handeler传递到其他的activity,这个activity接收到了之后,通过Messenger 的对象把message消息回传给第一个activity,通知他来操作这个请求。 实际上我们并没有传递对象到其他activity,而是通过handerl和Messenger这个对象连接之后   回传消息 通知有对象的那个activity进行处理。

首先是第一个activity  我的项目是一个蓝牙项目。我现在蓝牙已经连接上了。要在第三个界面有一个按钮要把连接断开。而这个断开的方法。又必须用到第一个界面acvity的对象才能调用该方法

                //开始连接 得到一个bluetoothGatt  bluetoothGatt是设备和手机连接的纽带
           BluetoothGatt     bluetoothGatt = bluetoothDevice.connectGatt(getActivity(), false, bluetoothGattCallback);

bluetoothGatt 这个对象来调用bluetoothGatt .disconnect();这个方法表示断开连接。

那现在我要在点击事件里面这么做   不是把这个bluetoothGatt 对象传递过去。而是通过handler来处理

      //开始连接 得到一个bluetoothGatt  bluetoothGatt是设备和手机连接的纽带
           BluetoothGatt     bluetoothGatt = bluetoothDevice.connectGatt(getActivity(), false, bluetoothGattCallback);


            }
        });
        imageView4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (imageView4.getText().toString().contains("已连接")) {

                    Intent intent = new Intent(getActivity(), FunctionSelection.class);
                    intent.putExtra("handler", new Messenger(handler));
                    startActivity(intent);
                } else {
                    Toast.makeText(getActivity(), "请先点击查找设备", Toast.LENGTH_SHORT).show();
                }

            }
        });

我在点击事件里面用intent 把new Messenger(handler)传递到FunctionSelection这个activity中。

这个handler是我们自己建一个出来就好了。

Handler  handler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(Message msg) {
                if (msg.what == 1) {//断开蓝牙连接
                    bluetoothGatt.disconnect();
                } else if (msg.what == 2) {//敲击 模式1
                    SetColor2Device(1, 1, 0, 0, 0);

                } else if (msg.what == 3) {//敲击模式的的强度值
                    Bundle bundle = msg.getData();
                    String s = bundle.getString("strength");
                    int b = Integer.parseInt(s);
               //     SetColor2Device(1, 0, 0, 0, 0);
                    SetColor2Device(1, 1, 200, 0, 100);

                }else if(msg.what==4){//自动 相当于模式2 的
                    SetColor2Device(1, 2, 0, 0, 0);
                }else if(msg.what==5){揉捏 模式3
                    SetColor2Device(1, 3, 0, 0, 0);
                }else if(msg.what==6){//推拿 模式4
                    SetColor2Device(1, 4, 0, 0, 0);
                }else if(msg.what==7){//点击停止之后要传入 开关状态为关闭
                    SetColor2Device(0, 0, 0, 0, 0);

                }else if(msg.what==8){//当倒计时结束时  自动调用方法传入关闭值  开关状态为关闭
                    SetColor2Device(0, 0, 0, 0, 0);
                }

                return false;
            }
        });

这个handler就要来处理其他activity发送来的消息。这个消息是通过msg.what来判断的。



接下来我们来看 刚刚跳转的第二个activty的接收过程。

 //敲击 相当于模式1
        percussion.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Messenger messenger=getIntent().getParcelableExtra("handler");
               

                Intent intent=new Intent(FunctionSelection.this, SetActivity.class);
                intent.putExtra("handler",messenger);
                intent.putExtra("flag",1);
                startActivity(intent);

            }
        });
我是在点击事件里面接收的   通过getintent来接收   得到一个Messenger 的对象,

然后又通过Intent来把messenger这个对象传递到下一个activity ,

下一个activity接收方法一样

 Messenger messenger = getIntent().getParcelableExtra("handler");
            Message message = new Message();
            String strength = wheelView.getSeletedItem();//获取强度值的内容
            String time = wheelview_riht.getSeletedItem();//获取时间的值
            message.what=3;
            Bundle bundle=new Bundle();
            bundle.putString("strength",strength);
            message.setData(bundle);

            try {
                messenger.send(message);
            } catch (RemoteException e) {
                e.printStackTrace();
            }

接收了之后如果有值需要传递  同样可以用bundle把值传递给第一个activity过去,让他那边去处理、

第一个activity要处理的东西就在刚刚第一个activyt里面的handler里面。用mag.what去判断   然后处理就行了。

至此这个段代码就结束了。可能有点儿乱,抱歉哈。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值