博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TabHost页和子Activity之间的通讯
阅读量:6690 次
发布时间:2019-06-25

本文共 2629 字,大约阅读时间需要 8 分钟。

hot3.png

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

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

转载于:https://my.oschina.net/u/2448717/blog/499629

你可能感兴趣的文章
FIS本地发布-其他同事通过IP访问
查看>>
圆的半径的算法
查看>>
centos安装python-opencv
查看>>
基于Google排名因素对Drupal进行SEO优化
查看>>
action中redirectAction到另一个命名空间中的action该如何配置
查看>>
label标签利用jquery获取值得方式为$("#message").html()
查看>>
javascript创建Ajax对象
查看>>
php文件缓存
查看>>
STS中logback.xml配置文件
查看>>
小菜鸟
查看>>
MFC Radio Button的基本应用
查看>>
sql union 列的字段不一样的时候
查看>>
思考方式--教会你如何去思考!
查看>>
2019.5.25 Noip模拟测试2 T2题解
查看>>
iOS block种类和切换
查看>>
mysql库的操作
查看>>
c++的getline()和get()函数
查看>>
面向对象第一单元总结
查看>>
模拟购物车
查看>>
web典型理论题整理HTML+CSS部分
查看>>