文档章节

TabHost页和子Activity之间的通讯

feng_blog
 feng_blog
发布于 2015/08/31 16:54
字数 433
阅读 22
收藏 0
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() {
//添加逻辑即可
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

feng_blog

feng_blog

粉丝 120
博文 130
码字总数 105422
作品 3
朝阳
iOS工程师
私信 提问
android的TabActivity

前言 这段时间在研究android平台上的开源项目——StandupTimer,这是由jwood所设计的一个较为简单android应用,用于控制会议时间,类似秒表倒计时。 TabActivity & TabHost tabActivity继承自...

长平狐
2013/04/25
134
0
tabhost组件点击切换操作

在使用TabHost组件时遇到了困难,我没有让它继承TabActivity,而是定义自己的tabhost,具体代码如下: mian.xml文件: tab1.xml文件: tab2.xml文件与tab1.xml文件相似,包含一个按钮和一个t...

追风箭
2014/05/07
625
0
史上最全的Android的Tab与TabHost讲解

Tab与TabHost 这就是Tab,而盛放Tab的容器就是TabHost 如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了。一个Activity,对应了多个功能布局。 ①新建一个Tab项目,注意,不要生成...

无鸯
2011/09/27
29.5K
8
Android选项卡实现之TabHost/TabSpec/TabWidget

Tab是什么就不用再用我来描述了。android的ui开发中,承载Tab的容器就是TabHost,每一个Tab对应一个Activity,每个Activity均会有自己的布局。 1.继承TabActivity 2.布局文件中使用tabHost,t...

古沐风
2013/11/27
6.2K
2
【android基础学习之八】——页面布局

声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误...

晨曦之光
2012/03/08
873
0

没有更多内容

加载失败,请刷新页面

加载更多

android抓取app启动类

adb shell,然后logcat | grep "ActivityManager: START"

安卓工程师王恒
10分钟前
7
0
并发编程之Java锁

一、重入锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized(重量级) 和 ReentrantLock(轻量级)等等 ) 。这些已经写好提供的锁为我们开发提供了便利。 重入锁...

codeobj
13分钟前
8
0
云栖深度干货 | 打造“云边一体化”,时序时空数据库TSDB技术原理深度解密

本文选自云栖大会下一代云数据库分析专场讲师自修的演讲——《TSDB云边一体化时序时空数据库技术揭秘》 自修 —— 阿里云智能数据库产品事业部高级专家 认识TSDB 第一代时序时空数据处理工具...

开源中国小二
14分钟前
7
0
mobile-nfv运行步骤

1. 编译过程 在 [workspaces] 的 <workdir> 目录运行以下命令: $ nfv-build make clean all... $ nfv-build make mobile-package...*** PACKAGE BUILT AT: /vob/BUG_117504/casa/nfv/b......

Robotcl_Blog
24分钟前
10
0
如何对邮箱做域名验证

做客户开发的时候,邮件群发仍然是个有效的手段。如果发海外邮件的话,选个服务器在国外的邮箱比较好,因为邮件抵达率会比较高一些。比如gmail, zoho mail等等,都可以。本文以zoho mail为例...

Zoho云服务
24分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部