android - broadcast

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);

}

}

}

}

};


通過上面的方法,就成功的在兩個組件之間進行了通訊!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章