开发者社区> 极客峰> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Fragment与Fragment相互切换之间的生命周期方法
最近一段时间忙于找工作,找到工作之后忙于项目上线,好久没有写过博客,现在感觉终于闲暇了,写一写这次项目中需要总结提炼的知识点,给自己留个印象吧,毕竟好记性不如烂笔头。
848 0
Fragment与Activity之间的通信
前言 君子博学而日参省乎已,则知明而行无过矣。 要显示Fragment,必须将Fragment添加到Activity中。添加到Activity中有如下两种方式。
672 0
Fragment进阶1——Fragment与Activity之间的通信与切换
本节再说一个Activity和Fragment之间通信的例子,系统有以下功能:在主activity下方有三个按钮,分别是send、record、common msg。
643 0
Fragment与Activity的相互通信(二)
之前用的是接口回调与广播通信来实现fragment与activity之间的相互通信。 http://blog.csdn.net/tyk0910/article/details/50405663 最近公司项目用的是EventBus,开始研究EventBus的实战应用。
803 0
Fragment与Activity的相互通信(一)
今天在做项目的时候,用到了平时再也熟悉不过的Fragment,其中涉及到了Activity与Fragment之间的通信,这里总结一下在自己项目中的应用。 参考博客: http://blog.
568 0
+关注
极客峰
开源中国热门博主,曾位列热门博主排行榜第二名(第一为其官方帐号),一个注重细节的技术狂,同时擅长Android、iOS、PHP开发,喜欢钻研新技术。我的微信公众账号:极客峰
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载