概述:
在Android中,不同的 Activity实例可能运行在一个进程中,也可能运行在不同的进程中。因此我们需要一种特别的机制帮助我们在Activity之间传递消息。Android中通过intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的,还可以包含消息的内容。对于一个Intent对戏,消息”目的地“是必须的,而内容则是可选项。
1.通过Bundle对象来传递
    发送:
    Intent intent = new Intent("本类文件名,可用this表示 ", "收件人地址,必须加class");
Bundle bndle = new Bundle();//创建email内容
bundle.putBoolean("boolean_key",true);//编写内容
bundle.putString("可自定义变量名","要传值的名字");
intent.putExtra("key",bundle);//封装 email
srartActivity(intent)//启动新的Activity
    接受:
    Intent intent =getIntent();//接受
Bundle bundle = intent.getBundleExtra("key");//打开email
bundle.getString("变量名");
2.使用Intent定义的Bundle对象
上面通过bundle对象来传递信息,bundle维护了一个HashMap<String,Object>对象,将我们的数据存储在这个HschMap中来进行传递。但是像上面这样的代码稍显复杂。
Intent intent = new Intent("当前类用this",将传递的类加class);
intent.putExtra("boolan_key",true);
intent.putExtra("string_key","string_value");
startActivity(intent);
 接受:
Intent intent = getIntent();
intent.getBooleanExtra("boolean_key",false);
intetn.getStringExtra("string_key");
 3.Activity返回数据 实例:
Android提供了一个机制,跳转到其他activity时,再返回,可以接受到其他activity返回的值,无需再start新的当前activity。
理论:在activity1中添加信息按钮为它添加onclick事件,实现跳转到activity2,在activity2中添加学生信息,比如姓名,年龄,班级等,然后点击提交,将信息映射到activity1中的TextView.
1)创建activity1XML文件
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="add"
android:layout_marginLeft="141dp"
android:layout_marginTop="214dp"
android:text="添加信息" />
 添加一个button按钮,给一个事件
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textColor="#FF4A06"
android:textSize="18sp"
android:layout_marginLeft="77dp"
android:layout_marginTop="58dp" />
 添加一个TextView让其信息显示
2)创建Activity1
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView)findViewById(R.id.textView1);
}
public void add(View v)
{
Intent intent = new Intent(this,newxinxi.class);
startActivityForResult(intent,1);

startActivityForResult 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从Activity1跳转到下一个Activity2,而当这个Activity2调用了finish()方法以后,程序会自动跳转回Activity1,并调用前一个Activity1中的onActivityResult( )方法

这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要>=0

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1&& resultCode==1)
{
String ages=data.getStringExtra("ages");
System.out.println(ages);
text.setText(ages);
}
}
(1)当需要返回值时,那么在启动另一个Activity时要用到Activity2(intent, REQUEST_CODE);
     注意第二个参数是请求的int类型的值,这个值要在onActivityResult()方法中和requestCode做判断的,
     由此来判断是启动的某个Activity。
(2)onActivityResult()方法中的第二个参数就是Activity2传回来的键,
     第三个参数就是Activity2传回来的键对应的值。
    3)创建Activity2的XML文件
<TextView android:text="姓名:"
android:layout_width="70dp"
android:id="@+id/name"
android:layout_height="20dp"/>
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
 创建姓名TextView和EditText
<requestFocus />
        <TextView android:text="年龄:"
android:layout_width="70dp"
android:id="@+id/age"
android:layout_height="20dp"/>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
 创建年龄TextView和EditText
         <TextView android:text="学校:"
android:layout_width="70dp"
android:id="@+id/school"
android:layout_height="20dp"/>
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
创建学校TextView和EditText
      <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="tijiao"
android:text="Button" />
      创建提交的按钮为其添加事件
4)创建Activity2文件
        public void tijiao(View v)
         {
          school1=(EditText)findViewById(R.id.editText1);
          names=(EditText)findViewById(R.id.editText2);
          ages=(EditText)findViewById(R.id.editText3);
        获取学校姓名和年龄的id
          a=ages.getText().toString();
          n=names.getText().toString();
          s=school1.getText().toString();
        取得输入框里的内容
          Intent intent=new Intent();
          String zong="姓名:"+n+" "+"年龄:"+a+" "+"学校:"+s;
          intent.putExtra("ages", zong);
        用intent的putExtra进行传值
          setResult(1, intent);

1、要接收setResult参数,只有通过startActivityForResult的方式启动,通过startActivity的方式是不行的。
2、哪个activity中写startActivityForResult(a1.this,a2.class),就在a1中的onActivityResult接收a2返回的setResult的值

          newxinxi.this.finish();

在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。


         }
 
 

转载于:https://www.cnblogs.com/Dragonl/p/4814191.html

Activity的传递数据与实例相关推荐

  1. 父activity启动子activity并传递数据

    1. Intent component : activity,service,broadcast receiver以及content provider component 与操作系统 通信的一种媒介工 ...

  2. android 不同activity之间传递数据

    1> 不同activity之间传递数据: Intent intent=new Intent(); intent.setClass(activity1.this,activity2.class); ...

  3. 使用 Bundle在Activity间传递数据

    使用    Intent 启动另一个 Activity Intent  showNextPage_Intent=new  new  new  new  Intent(); showNextPage_I ...

  4. 不同Activity之间传递数据--Bundle对象和startActivityForResult方法的实现

    首先,由于Activity是Android四大组件之一,如果一个应用程序中包含不止一个Activity,则需要在AndroidManifest.xml文件中进行声明. 例如进行如下的声明(程序中包含两 ...

  5. props传递对象_vue组件中使用props传递数据的实例详解

    在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递.父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息.看看它们是怎么工作的. 一.基本用法 组件不仅仅是 ...

  6. activity 点击后传递数据给fragment_Fragment 新特性 : Fragment Result API 使用以及源码分析

    原标题: Android Fragments: Fragment Result 原文地址: https://proandroiddev.com/android-fragments-fragment-r ...

  7. android finish()传参数,48. (android开发) activity间传递数据(打开浏览器、拨号盘、传参)...

    在 android 中多个 activity 中互相访问是常见的一种操作,比如:打开系统浏览器.显示系统拨号盘等等. 做这些操作的时候,自然是需要传递一些数据过去,比如:要打开的网址.要拨打的电话号码 ...

  8. Android入门篇二:使用意图在Activity之间传递数据

    首先,在这里稍微介绍一下意图(Intent)的概念: Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent 负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述, ...

  9. Android 中activity中传递数据的方式

    方式一 通过Intent进行数据传递(日后更新) 方式二 通过剪切板进行数据的传递 首先在第一个Activity中,设置所要进行传递的数据 /*** 通过剪贴板传递字符串数据的操作**/private ...

最新文章

  1. jenkins android sdk,Jenkins为什么找不到Android SDK?
  2. NCEPU:线下组队学习周报(007)
  3. netty系列之:自定义编码和解码器要注意的问题
  4. w3ctech 2011 北京站(组图)
  5. 第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java
  6. informix如何查询第一条记录
  7. 太极计算机ehr系统,(数据科学学习手札21)sklearn.datasets常用功能详解
  8. 封装算法: 模板方法(Template Method)模式
  9. go语言学习相关资料
  10. Mac 的 Adobe Creative Cloud 无法连接至服务器的解决办法?
  11. 阿里云 DNS 运维服务的演进和实践
  12. DHCP报文类型和中继
  13. 3GPP 3GPP2等协议文档下载网址汇总
  14. 绘制神经元的结构模式图,神经元结构示意图简易
  15. java 串行_java串行化
  16. 青龙-闪电世界(脚本更新)
  17. VBA-Excel中单元格的引用方法
  18. 使用activeMQ发送短信验证码
  19. 测试公开课资料系列02--Postman之chai.js断言应用
  20. 创业项目怎么获得专业的投融资服务?

热门文章

  1. 使用Keras打造一个实时可用交通标志识别App
  2. python遥感影像分类代码_Python 实现遥感影像波段组合的示例代码
  3. python简单选择排序_Python实现冒泡,插入,选择排序简单实例
  4. 小学生计算机课件,小学三年级计算机教学课件
  5. 统计学习方法第15章-奇异值分解SVD
  6. java批量实现1对1关系的自动匹配_杂谈Java内存Webshell的攻与防
  7. [ 2022年4月8日更新 ]Typecho Handsome主题美化教程
  8. Project Euler Problem 27小结
  9. Cocos2dx--------内存管理
  10. php截取3位数,使用php实现截取指定长度