TabHost页和子Activity之间的通讯
2015-11-06 08:57
447 查看
abHost的各个Tab页,都是由activity组成。
现在,某个子Activity中处理数据后,要自动跳转到另外一个Tab页中。这样,需要有个TabHost页和子Activity之间的通讯的机制。
子Activity通知TabHost:
1、通过广播方式
1)在TabHost中定义广播
定义变量
protected MessageBroadcastReceiver myReceiver = null;
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() {
//添加逻辑即可
}
现在,某个子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()); } } } |
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() {
//添加逻辑即可
}
相关文章推荐
- 页式虚拟存储管理
- 编程免费书Python,C/C++
- 最长上升子序列
- 第九周项目4—广义表算法库及应用
- 编制三角函数表
- 腾讯信鸽使用随笔
- SQL SERVER 10048
- datagrid使用本地加载的方式将js得到的json传递到jsp
- WCF中NetTCp配置
- php中的$_REQUEST和$_SERVER
- uva 120——Stacks of Flapjacks
- Spring框架简介---模块
- easyui 构建数据网格
- 2015/11/06 iOS学习笔记
- 第十周 项目二 二叉树遍历的递归算法
- Android音乐播放器(2)从SD卡中读取音乐
- python set
- HttpServletRequest类既有getAttribute()方法,也有getParameter()方法,有setAttribute()方法,而没有setParameter()方法
- 歌手大赛计分函数版
- 第九周项目4-广义表算法库及应用