您的位置:首页 > 其它

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

2016-12-21 18:47 447 查看
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去判断   然后处理就行了。

至此这个段代码就结束了。可能有点儿乱,抱歉哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: