文档章节

Tabhost中子Activity使用startActivityForResult后获取不到回调值问

zhouw
 zhouw
发布于 2014/03/31 10:43
字数 667
阅读 321
收藏 2

最近一段时间没有更新博客了,是因为一直忙于一个Android的项目,给某企业做一款基于北斗定位的物流车载终端。这个项目的难点在于平板的通信方式不是采用传统使用自带的通信模块,而是使用串口通过车载部标仪来进行通讯。对此,需要使用到NDK来开发和串口的通信服务,这个项目中我主要负责Android平板的所有界面和交互制作、以及业务逻辑的实现。我的另一名同学负责串口通信的开发,二人合作开发这个项目。整个项目组有十几个人,Android端就我们两个,所以任务还是很重的,目前进度过半,还是天天加班,虽然很累,但是成长的路上少不了辛苦,遇到问题、解决问题,我们一直在路上。

       回归正题,今天主要是记录一个我开开发中遇到的一个小问题,其实这不是第一次遇到,之所以记录下来是为了提供我的解决办法供大家参考!


问题描述:当主Activity A是一个Tabhost布局,或者是一个ActivityGroup,在子Activity B中使用startActivityForResult来开启一个新的Activity C,新Activity C操作完后返回Activity B并传回一个值,这个值在Activity B的onActivityResult方法中无法取到。

问题原因:startActivityForResult后触发的回调方法并不在Activity B中,而是在Activity A中,Tabhost和ActivityGroup都是Activity容器,在子Activity中使用startActivityForResult后都只会触发其父Activity的回调方法。

解决方案:

1.在Activity B中使用如下方法开启Activity C

[java] view plaincopy

  1. getParent().startActivityForResult(intent, 0);  


2.新建一个回调接口OnTabActivityResultListener

[java] view plaincopy

  1. public interface OnTabAactivityResultListener{  

  2.     public void onTabActivityResult(int requestCode, int resultCode, Intent data);  

  3. }  


3.让Activity B实现上述接口,在Activity A的onActivitResult方法中做如下操作:

[java] view plaincopy

  1. @Override  

  2.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  

  3.         super.onActivityResult(requestCode, resultCode, data);  

  4.         //取得当前活动的Activity  

  5.         Activity liveActivity = getLocalActivityManager().getCurrentActivity();  

  6.         //回调方法  

  7.         OnTabAactivityResultListener onTabAactivityResultListener = (OnTabAactivityResultListener)liveActivity;  

  8.         onTabAactivityResultListener.onTabActivityResult(requestCode, resultCode, data);  

  9.           

  10.     }  


4.在Activity B中实现接口OnTabActivityResultListener中的方法,取到返回值

[java] view plaincopy

  1. @Override  

  2.     public void onTabActivityResult(int requestCode, int resultCode, Intent data) {  

  3.         if (resultCode == RESULT_OK) {  

  4.             Bundle bundle = data.getExtras();  

  5.             String type = bundle.getString("type");  

  6.         }  

  7.     }  


本方案的方法就是实现了一个回调方法,使A得到操作结果后,回调B中实现接口的方法,从而得到返回值更新B的UI;


© 著作权归作者所有

zhouw
粉丝 1
博文 9
码字总数 9472
作品 0
长沙
程序员
私信 提问
TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案

在iphone开发中貌似有个UITabBarController,(我以为是toolbar,四楼的兄弟更正的),UITabBarController在底部,也有对应的切换效果,都封装好了。但是在android的中,这个东西它在顶部。。...

长平狐
2012/08/21
1K
0
TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案

在iphone开发中貌似有个UITabBarController,(我以为是toolbar,四楼的兄弟更正的),UITabBarController在底部,也有对应的切换效果,都封装好了。但是在android的中,这个东西它在顶部。。...

长平狐
2012/08/14
592
0
TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案

在iphone开发中貌似有个UITabBarController,(我以为是toolbar,四楼的兄弟更正的),UITabBarController在底部,也有对应的切换效果,都封装好了。但是在android的中,这个东西它在顶部。。...

长平狐
2012/08/09
124
0
TabActivity中子Activity相互跳转

TabHost中的子Activity虽然是用Intent来启动,但是实际上并没有去启动一个全新的Activity,这点可以从生命周期打log看出来。 1.把tabhost保存为公有变量 2.tabhost处理完成后赋值 3.跳转处调...

鉴客
2011/11/27
4.4K
3
Android TabHost 详细讲解

一、什么是TabHost。 Android 里面的TabHost就是选项卡,看下图(新浪微博界面): 至于选项卡有什么好处或者用途,我想代码哥们都知道吧,我就不多说了。 二、在Android里面如何实现TabHost 有...

长平狐
2012/09/03
2.6K
1

没有更多内容

加载失败,请刷新页面

加载更多

ubuntu或ubuntu kylin优麒麟中安装QQ、wechat微信、百度网盘

从中国国内的地址下载deepin wine,码云上的。这样网速比较快。然后,按照说明向下安装。 https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu...

gugudu
30分钟前
1
0
基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。 业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源...

别打我会飞
49分钟前
14
0
Zookeeper的实践指南

本章重点 1.数据存储2.基于Java API初探Zookeeper的使用3.深入分析Watcher机制的实现原理4.Curator客户端的使用,简单高效 数据存储 事务日志快照日志运行时日志 bin/zookeepe...

须臾之余
53分钟前
2
0
MySQL mybatis Point类型数据

MySQL中的point用于表示GIS中的地理坐标,在GIS中广泛使用 如何写入mysql,如下图: CREATE TABLE `test-point` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序号', `point` ......

张欢19933
今天
3
0
设计模式-适配器模式

适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入...

HOT_POT
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部