在Android中startActivityForResult主要作用就是:

A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A-Activtiy



//看效果


//看代码

[java] view plain copy
  1. packagesn.len.actres;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.widget.Button;
  8. importandroid.widget.TextView;
  9. publicclassActivityResultDemoActivityextendsActivity
  10. {
  11. privateButtonbutton_start_task;
  12. privateTextViewTextView_result;
  13. @Override
  14. publicvoidonCreate(BundlesavedInstanceState)
  15. {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. button_start_task=(Button)findViewById(R.id.button_start_task);
  19. TextView_result=(TextView)findViewById(R.id.TextView_result);
  20. button_start_task.setOnClickListener(newbutton_start_task_Listener());
  21. }
  22. privateclassbutton_start_task_ListenerimplementsOnClickListener
  23. {
  24. publicvoidonClick(Viewv)
  25. {
  26. Intentintent=newIntent(ActivityResultDemoActivity.this,SimpleTaskActivity.class);
  27. //关键点来了,使用startActivityForResult来启动
  28. startActivityForResult(intent,100);
  29. }
  30. }
  31. /**
  32. *复写onActivityResult,这个方法
  33. *是要等到SimpleTaskActivity点了提交过后才会执行的
  34. */
  35. @Override
  36. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)
  37. {
  38. //可以根据多个请求代码来作相应的操作
  39. if(20==resultCode)
  40. {
  41. Stringbookname=data.getExtras().getString("bookname");
  42. Stringbooksale=data.getExtras().getString("booksale");
  43. TextView_result.setText("书籍名称:"+bookname+"书籍价钱"+booksale+"元");
  44. }
  45. super.onActivityResult(requestCode,resultCode,data);
  46. }
  47. }

//任务处理类 [java] view plain copy
  1. packagesn.len.actres;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.widget.Button;
  8. importandroid.widget.EditText;
  9. publicclassSimpleTaskActivityextendsActivity
  10. {
  11. privateEditTextEditText_bookname;
  12. privateEditTextEditText_booksale;
  13. privateButtonButton_task_fulfill;
  14. @Override
  15. protectedvoidonCreate(BundlesavedInstanceState)
  16. {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main2);
  19. EditText_bookname=(EditText)findViewById(R.id.EditText_bookname);
  20. EditText_booksale=(EditText)findViewById(R.id.EditText_booksale);
  21. Button_task_fulfill=(Button)findViewById(R.id.Button_task_fulfill);
  22. Button_task_fulfill.setOnClickListener(newButton_task_fulfill_Listener());
  23. }
  24. privateclassButton_task_fulfill_ListenerimplementsOnClickListener
  25. {
  26. publicvoidonClick(Viewv)
  27. {
  28. Stringstr_bookname=EditText_bookname.getText().toString();
  29. Stringstr_booksale=EditText_booksale.getText().toString();
  30. //判断空,我就不判断了。。。。
  31. Intentdata=newIntent();
  32. data.putExtra("bookname",str_bookname);
  33. data.putExtra("booksale",str_booksale);
  34. //请求代码可以自己设置,这里设置成20
  35. setResult(20,data);
  36. //关闭掉这个Activity
  37. finish();
  38. }
  39. }
  40. }




举例说我想要做的一个事情是,在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。 /*****************************/ 华丽丽的分割线/*****************************/ 目的: A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A 先看 A.java 的相关代码 //--A.java--// /* * 要做两件事情,第一是用startActivityForResult() 启动B,其次是回收B的结果 */ //启动B Intent bintent = new Intent(A.this, B.class); //设置 bintent的Bundle的一个值 String bsay = "Hello, this is B speaking"; bintent.putExtra("listenB", bsay) startActivityForResult(bintent,0); // 参数(Intent intent, Int requestCode) 的 requestCode 对应下面回收Bundle时识别用的 //重写onActivityResult()来处理返回的数据,建议先看B.java 的代码再回来看这里比较好理解 //这理有三个参数 requestCode, resultCode, data protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK case RESULT_OK: Bundle b=data.getExtras(); //data为B中回传的Intent String str=b.getString("ListenB");//str即为回传的值"Hello, this is B speaking" /* 得到B回传的数据后做什么... 略 */ break; default: break; } } ------------------------------------------------------------------------------------- //-- B.java--// // 用setResut() 准备好要回传的数据后,只要使用finish()的方法就能把打包好的数据发给A且运行onActivityResult()部分的代码 Intent aintent =new Intent(B.this, A.class); /* 将数据打包到aintent Bundle 的过程略 */ setResut(RESULT_OK,aintent); //这理有2个参数(int resultCode, Intent intent) ... ... finish(); ------------------------------------------------------------------------------------- OK,代码如上,可能这个时候还会有点疑问,关于参数的疑问。直接看android sdk 帮助说得更清楚。我发现网上有些文章还有吧 requestCode 和 resultCode 混淆说明错的。 startActivityForResult(Intent intent, Int requestCode) intent 传给B的,不解释,看不懂你还是玩玩手机算了,别想开发的事情了 requestCode >=0就好,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。 setResut(int resultCode, Intent intent) resultCode 如果B子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的 RESULT_OK 值,没有特殊情况用它就好了,sdk有说明的,呵。 intent 继续不解释,传回给A的onActivityResult() onActivityResult(int requestCode, int resultCode, Intent intent) 这里三个都不用解释了,与上文对应的东西。如果不对requestCode和resultCode 加以识别区分的话,只要有其他activity setResult到了A onActivityResult()会无差别处理。


摘自:http://blog.csdn.net/yanglian20009/article/details/7238995 和 http://www.cnblogs.com/mubai/archive/2011/09/21/2183816.html




更多相关文章

  1. android小代码
  2. 第一个变化———由support库到Androidx
  3. 本科学习Android笔记之传智播客_快速掌握Android视频教程
  4. Android(安卓)蓝牙4.0 Ble 连接Ble模块
  5. Android(安卓)4.2上调试RT3070 WiFi模块
  6. Afinal简介
  7. 编写高效的Android代码(译)
  8. Android(安卓)Studio 一个module引用另一个模块module的方法
  9. android的ndk开发入门示例

随机推荐

  1. Android学习规划和学习资料
  2. [Android] TextView的垂直滚动效果
  3. android native c development
  4. 跑马灯效果:
  5. Android 限制EditText只能输入数字、限制
  6. 关于Android软键盘弹出,会把原来的界面挤
  7. Android SDK相关问题
  8. Android xml资源文件中@、@android:type
  9. 让star也具有CheckBox 功能
  10. android程序在Layout中设置控件水平或垂