android中靠broadcast 在不同组件之间进行通讯, 这一点其实和Qt的信号槽很类似。
假设有两个activity, Activity A,和 Activity B
A中有一个spinner,当选择改变时候,把选中的项发送给B中进行后续处理。
通过注册一个Broadcast可以把消息通知出去。通过Intent.putExtra()方法可以传递参数。
Activity A中:
private OnItemSelectedListener mSpinnerItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
//当spinnerType刷新时候,注册一个广播,然后在EditActivity里面进行接受并更新view-根据spinnerType来决定是否需要手工在EditActivity里面增加一个Spinner
Intent intent = new Intent();
intent.putExtra("Type", spinnerType.getSelectedItem().toString());
intent.setAction("action.TypeUpdated");
sendBroadcast(intent);
}
};
Activity B中:
在onCreate()方法中注册一个广播接收器:
//注册broadcast receiver接受TabhostActivity里面的spinnerType下拉列表框的更新广播!
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("action.TypeUpdated");
registerReceiver(mTypeBroadcastReceiver, intentFilter);
然后定义该广播接收器
BroadcastReceiver mTypeBroadcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(action.equals("action.TypeUpdated")){
if(intent.getExtras().getString("Type").equals("250")){
if(rl.findViewById(R.id.param1_spinner_shaft) != null){
rl.removeView(spinner_shaft);
rl.removeView(label_for_spinner_shaft);
}
} else if (intent.getExtras().getString("Type").equals("230")){
//...
if(rl.findViewById(R.id.param1_spinner_shaft) == null){
rl.addView(spinner_shaft);
rl.addView(label_for_spinner_shaft);
}
}
}
}
};
通过上面的方法,就成功的在两个组件之间进行了通讯!