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);
}
}
}
}
};
通過上面的方法,就成功的在兩個組件之間進行了通訊!