天天看点

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

}                 

public void handlemessage(message msg) { // 处理消息 

switch (msg.what) { 

case constant.broadcast_key_tabhost_change: 

int tabindex = (integer) msg.obj; 

break; 

default: 

toast.maketext(getapplicationcontext(), msg.obj.tostring(), 

toast.length_short).show(); 

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的 

protected void onresume() { 

//添加逻辑即可 

}