码迷,mamicode.com
首页 > 其他好文 > 详细

Activity的传递数据与实例

时间:2015-09-16 20:02:34      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

概述:
    在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。


         }
 
 

Activity的传递数据与实例

标签:

原文地址:http://www.cnblogs.com/Dragonl/p/4814191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!