TabHost頁和子Activity之間的通訊

TabHost的各個Tab頁,都是由activity組成。
現在,某個子Activity中處理數據後,要自動跳轉到另外一個Tab頁中。這樣,需要有個TabHost頁和子Activity之間的通訊的機制。
 
子Activity通知TabHost:
1、通過廣播方式
1)在TabHost中定義廣播
定義變量
protected MessageBroadcastReceiver myReceiver = null;
 
在onCreate中註冊:
加入receiveBroadcast();
 
private void receiveBroadcast() {
myReceiver = new MessageBroadcastReceiver();
//Log.d(LOG_TAG, "receiveBroadcast() ::::: " + myReceiver.hashCode());
IntentFilter intentFilter = new IntentFilter("android.intent.action.MAIN");
registerReceiver(myReceiver, intentFilter);
}
 
在onDestroy中釋放廣播
 
if (myReceiver != null)
unregisterReceiver(myReceiver);
 
MessageBroadcastReceiver類定義:
public class MessageBroadcastReceiver extends BroadcastReceiver {
 
@Override
public void onReceive(Context context, Intent intent) {
try {
String action = intent.getAction();
if (action.equals("android.intent.action.MAIN")) {
switch (intent.getIntExtra("msg", 0)) {
case Constant.BROADCAST_KEY_TABHOST_CHANGE: {
int tabIndex = intent.getIntExtra("tabIndex", 0);
animateChangeTab(tabIndex);
}
}
}
} catch (Exception e) {
e.printStackTrace();
Log.v(LOG_TAG, e.getMessage());
}
}
}
 
2)在子Activity中調用
Intent intent = new Intent("android.intent.action.MAIN");
intent.putExtra("msg", Constant.BROADCAST_KEY_TABHOST_CHANGE);
intent.putExtra("tabIndex", 0);
sendBroadcast(intent);
 
 
2、通過handler接收消息
1)在TabHost中定義Handler
 
// 得到主線程的Looper對象
Looper looper = Looper.myLooper();
// 這個myHandler由主線程創建所以它與主線程關聯
public MessageHandler msgHandler = new MessageHandler(looper);
 
 
private void showMessage(String message) {
 
// 發送本次信息
msgHandler.removeMessages(0);
Message m = msgHandler.obtainMessage(1, 1, 1, message); // 構造要傳遞的消息
msgHandler.sendMessage(m); // 發送消息: 系統會自動調用handleMessage 方法來處理消息
}
 
 
public class MessageHandler extends Handler {
public MessageHandler(Looper looper) {
super(looper);
}                
 
@Override
public void handleMessage(Message msg) { // 處理消息
switch (msg.what) {
case Constant.BROADCAST_KEY_TABHOST_CHANGE:
int tabIndex = (Integer) msg.obj;
animateChangeTab(tabIndex);
break;
default:
Toast.makeText(getApplicationContext(), msg.obj.toString(),
Toast.LENGTH_SHORT).show();
break;
}
}
}
 
2)在子Activity中調用
 
BasketballMainActivity t= (BasketballMainActivity) getParent();                 
Message message = new Message();
message.what = Constant.BROADCAST_KEY_TABHOST_CHANGE;
message.obj  = 0;
    t.msgHandler.sendMessage(message); 
 
TabHost通知子Activity:
1、子Activity是活動的
在TabHost中增加
Activity currentActivity = getCurrentActivity();
 
if (currentActivity instanceof A) {
           ((A) currentActivity).處理方法XXX;
 
 }
 
2、子Activity是不是活動的
在子Activity的
@Override
protected void onResume() {
//添加邏輯即可
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章