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 对象传递过去。而是通过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();
}
}
});
这个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;
}
});
接下来我们来看 刚刚跳转的第二个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();
}
第一个activity要处理的东西就在刚刚第一个activyt里面的handler里面。用mag.what去判断 然后处理就行了。
至此这个段代码就结束了。可能有点儿乱,抱歉哈。