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() {
//添加逻辑即可
}