需求
Fragment中监听到组件事件后,将相应的参数封装后传递给Activity,同时调用Activity中某个方法
实现思路
- Fragment中使用Bundle对欲传递的多个数据进行打包,生成Bundle对象。同时,创建Message对象,设置Message对象的数据源为打包后的Bundle对象,设置Message对象的what字段以便提取message时进行识别。
- 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;
}
}
}
};