[8]TabHost在TabHost中子Activity无法接收返回值
2015-10-17 14:13
225 查看
问题:在TabHost的子Activity中通过打开修改地址Activity获取新的位置信息,将新信息返回子Activity并更新其经纬度信息。
参考资料:
1、http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
2、http://zhidao.baidu.com/question/2052260904706818147.html
看了资料1以后明白根本问题是因为TabHost这东西一直位于布局最上层。
一开始我想把TabHost往下移,就像WORD或者PPT一样,把TabHost置于底层,然而不得其法。
于是退而求其次,参考资料1依葫芦画瓢,然而还是不行。步骤2中getLocalActivityManager()方法是ActivityGroup中的方法,我没继承ActivityGroup,也没继承TabActivity,自然就没办法用这个方法。于是我就自己new了一个LocalActivityManager,然而还是不行。一设断点,发现原来是subActivity为空,也就是说getLocalActivityManager().getCurrentActivity()没取到值。我觉得这方法可能不是要继承ActivityGroup就是要继承TabActivity,然而我并不像继承这两个中的任何一个,所以我想了一个笨办法。这个笨办法不用细说了,看代码大家就都知道了。
PS:如果有更好的方法麻烦告知我一声,我也是困扰了两天走投无路了才出此下策。
1、子Activity
//以下是FormerActivity中的全局变量
private static final int REQUEST_CODE = 3;//大于0就好,作用是区别是哪个Activity回传的数据
private boolean isFromParent = false;//onResume时区分是否需要重新刷新
//以下代码放在准备调用startActivityForResult的方法中
Intent intent = new Intent(FormerActivity.this, LatterActivity.class);
isFromParent = true;
getParent().startActivityForResult(intent, REQUEST_CODE);
2、父Activity(即调用TabHost所在的布局文件的Activity)
private String latitude = null;//纬度
private String longitude = null;//经度
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case RESULT_OK:
latitude = data.getStringExtra("latitude");
longitude = data.getStringExtra("longitude");
setLocationResult();
break;
case RESULT_CANCELED:
break;
default:
break;
}
}
public void setLocationResult(){
setLatitude(latitude);
setLongitude(longitude);
}
3、子Activity
@Override
protected void onResume() {
super.onResume();
if (isFromParent) {//判断是否从父Activity处获取经纬度,若获取,则更新当前经纬度信息
getLocationResult();
}
}
public void getLocationFromParent() {//从父Activity处获取经纬度
MainNativeActivity parentActivity = (PanrentActivity) FormerActivity.this.getParent();
parentActivity.setLocationResult();
String latitudeLR = parentActivity.getLatitude();
String longitudeLR = parentActivity.getLongitude();
if (latitudeLR != null && longitudeLR != null) {
longitude = longitudeLR;
latitude = latitudeLR;
}
}
参考资料:
1、http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
2、http://zhidao.baidu.com/question/2052260904706818147.html
看了资料1以后明白根本问题是因为TabHost这东西一直位于布局最上层。
一开始我想把TabHost往下移,就像WORD或者PPT一样,把TabHost置于底层,然而不得其法。
于是退而求其次,参考资料1依葫芦画瓢,然而还是不行。步骤2中getLocalActivityManager()方法是ActivityGroup中的方法,我没继承ActivityGroup,也没继承TabActivity,自然就没办法用这个方法。于是我就自己new了一个LocalActivityManager,然而还是不行。一设断点,发现原来是subActivity为空,也就是说getLocalActivityManager().getCurrentActivity()没取到值。我觉得这方法可能不是要继承ActivityGroup就是要继承TabActivity,然而我并不像继承这两个中的任何一个,所以我想了一个笨办法。这个笨办法不用细说了,看代码大家就都知道了。
PS:如果有更好的方法麻烦告知我一声,我也是困扰了两天走投无路了才出此下策。
1、子Activity
//以下是FormerActivity中的全局变量
private static final int REQUEST_CODE = 3;//大于0就好,作用是区别是哪个Activity回传的数据
private boolean isFromParent = false;//onResume时区分是否需要重新刷新
//以下代码放在准备调用startActivityForResult的方法中
Intent intent = new Intent(FormerActivity.this, LatterActivity.class);
isFromParent = true;
getParent().startActivityForResult(intent, REQUEST_CODE);
2、父Activity(即调用TabHost所在的布局文件的Activity)
private String latitude = null;//纬度
private String longitude = null;//经度
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case RESULT_OK:
latitude = data.getStringExtra("latitude");
longitude = data.getStringExtra("longitude");
setLocationResult();
break;
case RESULT_CANCELED:
break;
default:
break;
}
}
public void setLocationResult(){
setLatitude(latitude);
setLongitude(longitude);
}
3、子Activity
@Override
protected void onResume() {
super.onResume();
if (isFromParent) {//判断是否从父Activity处获取经纬度,若获取,则更新当前经纬度信息
getLocationResult();
}
}
public void getLocationFromParent() {//从父Activity处获取经纬度
MainNativeActivity parentActivity = (PanrentActivity) FormerActivity.this.getParent();
parentActivity.setLocationResult();
String latitudeLR = parentActivity.getLatitude();
String longitudeLR = parentActivity.getLongitude();
if (latitudeLR != null && longitudeLR != null) {
longitude = longitudeLR;
latitude = latitudeLR;
}
}
相关文章推荐
- python strip()函数
- 模态视图的modalTransitionStyle、modalPresentationStyle
- UFT GUI 测试—— 概述 相关项: GUI 测试和组件 UFT GUI 测试解决方案采用关键字驱动测试的概念, 以增强测试创建和维护。 关键字驱动测试是一项将大量编程工作与实际测试步骤分离的技术
- [C++]实现委托模型
- 开始unity学习
- S5PV210的u-boot移植
- android之对话框“确定退出吗?”
- javascript 数字日期格式转换为中文
- .net 学习计划
- 函数:函数的定义、函数的性质
- nodejs支持ssi实现include shtml页面
- 密码框密码不能绑定问题解决方案
- poj3734
- 信1407-2班20142897程怀远 课后题第一小题 10.17
- [PAT (Advanced Level) ]1011. World Cup Betting 解题文档
- c总结2 ---自己实现字符串的拷贝(指针学习1)
- AsyncTask的用法
- 邮件服务器DNS设置-----MX、SPF、DKIM记录详解
- 小感悟
- Django1.8 关于 静态文件配置