前天遇到了一个麻烦,还真是麻烦啊。

我使用startActivityForResult()&onActivityResult()。由Activity-A 跳转到Activity-B 页面,然后在Activity-B页面编辑完个人资料之后携带个人数据交回到Activity-A页面。事实上非常easy的问题,可是 让我没有预料到的是居然出现了岔子。以下展示我的效果图及正确的代码:

这些代码是作为编辑昵称:<Activity-B页面>

public class EditToNickNameAty extends Activity implements OnClickListener{

	private EditText edtNickName;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState); setContentView(R.layout.aty_thedata_edit_nickname); findViewById(R.id.btn_back).setOnClickListener(this);
edtNickName=(EditText) findViewById(R.id.edt_nickName);
findViewById(R.id.img_nickNameCancell).setOnClickListener(this);
findViewById(R.id.btnOk).setOnClickListener(this); } @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.img_nickNameCancell://昵称清空设置键
edtNickName.setText("");
break;
case R.id.btnOk:
nickNameHandleViews();
break;
case R.id.btn_back:
finish();
overridePendingTransition(R.anim.loadout_from_enter,R.anim.loadout_from_exit);
break;
default:
break;
}
} private void nickNameHandleViews() {
// TODO Auto-generated method stub
String result = edtNickName.getText().toString();
Intent resultFor=new Intent(this, PersonalDataEditAty.class);
if(TextUtils.isEmpty(result)){
result = "";
}
Bundle data = new Bundle();
data.putString("result", result);
resultFor.putExtras(data);
//设置结果并进行传输
this.setResult(PersonalDataEditAty.ATY_CODE_NICKENAME, resultFor);
this.finish();
}
}

Activity-B页面:

跳转button作跳转监听:

case R.id.lay_item_nikeName:
Intent nickName = new Intent(this, EditToNickNameAty.class);
startActivityForResult(nickName, 10);//ATY_CODE_NICKENAME
overridePendingTransition(R.anim.loadin_from_enter,R.anim.loadin_from_exit);
break;

接收从Activity-A携带过来的数据:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(resultCode==ATY_CODE_NICKENAME){//昵称
Log.d("json", "//昵称"+data.getExtras().getString("result"));
if(OperationTool.isNetWorkConnected(this)){
resetNickName = data.getExtras().getString("result");
get(mHandler, UrlFinalcons.url+"member_edit? "+"token="+token+"&nick="+resetNickName, NormalFinalcons.NICK_NAME);
} }

当中一些细节问题这里提一下:

在onActivityResult()。方法參数中參数--int resultCode  --int requestCode  --Intent data

当中,

resultCode:是Activity-A页面 startActivityForResult(intent,resultCode); 中与该跳转方法的第二个參数匹对且相等;

requestCode:是Activity-B页面 setResult(requestCode, intent);中与该跳转方法的第一个參数匹配且相等;

data:是Activity-B页面 setResult(requestCode, intent);中与该跳转方法的第二个參数匹配且相等。

注意:startActivityForResult(intent,resultCode);中的resultCode最好不要与setResult(requestCode, intent);中的requeCode相等。resultCode>0

最后解决实际问题:为什么我的全部的配置都做了。就是不能由B------->A的正常跳转呢?

原因一:与 Activity 的载入模式(launchMode)有关;Activity的载入模式,在这样的的跳转的方式下要使用标准模式(我就是使用了 android:launchMode="singleTop"模式,结果不能正常跳转)

原因二:调用startActivityForResult的參数问题。即原先调用时这样:startActivityForResult(intent, 0);是第二个參数的问题。该參数必须大于0才干在返回值,并激活onActivityResult方法。

原因三:在TabHost的子Activity中startActivityForResult调用其它Activity时候遭遇到onActivityResult方法不响应的问题;

解决方式:

1.通过父Activity启动其它Activity;

2.实现父Activity的onActivityResult方法,将该处接收到的请求转发给当前活动的子Activity;

3.自己定义一个转发接口用来实现第2步中的转发功能;

4.子Activity中实现第3步接口中的方法用来接收返回信息;

代码例如以下:

1.通过父Activity启动其它Activity

 getParent().startActivityForResult(new Intent(...), REQUEST_CODE);

2.实现父Activity的onActivityResult方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 获取当前活动的Activity实例
Activity subActivity = getLocalActivityManager().getCurrentActivity();
//推断是否实现返回值接口
if (subActivity instanceof OnTabActivityResultListe<wbr>ner) {
//获取返回值接口实例
OnTabActivityResultListe<wbr>ner listener = (OnTabActivityResultListe<wbr>ner) subActivity;
//转发请求到子Activity
listener.onTabActivityResult(requestCode, resultCode, data);
}
super.onActivityResult(requestCode, resultCode, data);
}

3.自己定义接口

public interface OnTabActivityResultListener {

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

}

4.子Activity须要实现onTabActivityResult方法

@Override

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

        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {

            //实现该处逻辑

        ...

        }

    }
/** <span>凡是Activity本身含有上次父类的情况都不能直接使用startActivityForResult。而要通过getParent()。通过父类调用此方法。</span>     */

版权声明:本文博客原创文章,博客,未经同意,不得转载。

BUG系列:转让startActivityForResult()&amp;onActivityResult()没有反应的更多相关文章

  1. Android基础:startActivityForResult 和 onActivityResult 问题

    项目中用到弹出Acitivity来获得用户输入 所以用到 onActivityResult()方法接受用户输入 奇怪问题 startActivityForResult() 后直接调用 onActivi ...

  2. Android学习 之 startActivityForResult 和 onActivityResult

    startActivityForResult 和 onActivityResult() 作用:主要用于 主Activity向调用的 子Activity 获得数据. 使用方法:在 主Activity写 ...

  3. 总结:调用startActivityForResult,onActivityResult无响应的问题

    人人都知道,可以通过使用 startActivityForResult() 和 onActivityResult() 方法来传递或接收参数. 但你是否遭遇过onActivityResult()不执行或 ...

  4. IE CSS Bug 系列

    1.[IE CSS Bug系列]IE6&IE7图片链接无效 <!doctype html> <html> <head> <meta charset=& ...

  5. startActivityForResult and onActivityResult

    startActivityForResult and onActivityResult startActivityForResult 开启Activity 组织数据之后 发送,onActivityRe ...

  6. 调用startActivityForResult,onActivityResult无响应的解决办法

    三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...

  7. Android的startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回

    一.使用场景 在一个主界面(主Activity)通过意图跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回主页面,将子activity中得到的数据显示在主界面/完成的数据交给主Ac ...

  8. [Android学习笔记]startActivityForResult和onActivityResult的使用

    发开过程中,免不了多个页面之间相互交互通信. Android中使用startActivityForResult方法和onActivityResult配合完成任务 startActivityForRes ...

  9. Android使用 startActivityForResult 、 onActivityResult 时的注意事项

    今天使用 startActivityForResult 时遇到两个问题,应该是常见问题了吧,浪费了些时间才搞定,做个记录. 1. onActivityResult 的触发顺序问题 这个问题很郁闷,我一 ...

随机推荐

  1. BFS寻路的AS3实现

    关于BFS的相关知识由于水平有限就不多说了,感兴趣的可以自己去wiki或者其他地方查阅资料. 这里大概说一下BFS寻路的思路,或者个人对BFS的理解: 大家知道Astar的一个显著特点是带有启发函数, ...

  2. android 调用系统打电话和发短,懒得记

     Intent intent = new Intent();         intent.setAction(Intent.ACTION_CALL);         intent.setData( ...

  3. 服务启动错误1053,一例解决方案(给用户添加NetworkService权限)

    WIndows XP的服务中,有一个服务需要以NT  AUTHORITY/NetworkService用户启动,但怎么也启动不起来,使用本地系统帐户启动没有任何问题,但是换成NetworkServic ...

  4. 通过cmd命令到ftp上下载文件

    通过cmd命令到ftp上下载文件 点击"开始"菜单.然后输入"cmd"点"enter"键,出现cmd命令执行框 2 输入"ftp& ...

  5. android 定时拍照并发送微博

    最近在做android方面的开发,下面是android自动对焦并拍照的小例子: package com.comnvi.camera; import java.io.File; import java. ...

  6. Windows Azure入门教学系列 (三):创建第一个Worker Role程序

    在开始本教学之前,请确保你从Windows Azure 平台下载下载并安装了最新的Windows Azure开发工具.本教学使用Visual Studio 2010作为开发工具. 步骤一:创建解决方案 ...

  7. Beaker 1.6.4 : Python Package Index

    Beaker 1.6.4 : Python Package Index Beaker 1.6.4 Download Beaker-1.6.4.tar.gz A Session and Caching ...

  8. 杭电 1711 Number Sequence

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. 【ASP.NET Web API教程】2.3.7 创建首页

    原文:[ASP.NET Web API教程]2.3.7 创建首页 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 7: Crea ...

  10. 阿斯钢iojeg9uhw8uhy平

    http://www.huihui.cn/share/8424421 http://www.huihui.cn/share/8424375 http://www.huihui.cn/share/842 ...