Android中Activity之间的数据传递和Intent使用

首先介绍一下Activity:Activity是Android的四大组件之一,Activity参与的工作大多和操作界面有关。
在我的下一篇文章会重点介绍关于Activity生命周期的内容,这篇文章先不管这个部分。


关于Activity启动的方式:

  • 一个程序通常会包含多个Activity,但是只有一个Activity会作为程序的主入口,就是第一个启动的Activity。
  • 如果当前的Activity不是程序第一个启动的Activity那么这个Activity的启动方式就只能是由其他的Activity来启动
    • startActivity(Intent intent) :当前的Activity调用这个方法,直接启动其他的Activity
    • startActivityForResult(Intent intent, int requestCode):用请求码来启动新Activity,而且原来的Activity将会在新Activity中获取到数据返回。

关于Android关闭的方法:

  • finish():结束当前的Activity
  • finishActivity(int requestCode):结束用startActivityForResult方法启动的Activity

使用Bundle在Activity之间交换数据:
我们在上面看到Activity之前的跳转一直会有用到一个参数intent,这东西其实就是一个信使,Activity之间数据交换的媒介,我们主要将数据放入intent即可

Android为intent提供了很多put和get方法来进行数据的存取,但是有一个非常便利的东西叫做Bundle
,它是intent里面的一个简单的数据包,如果直接使用intent来存取数据会显得很乱,所以我们通常让bundle来帮我们打包数据,intent也主要用bundle来携带数据。
注意:在没有创建Bundle对象时,如果向Intent存入数据,Intent会自行创建一个Bundle对象,再向Bundle存入数据

之前在做项目的时候在登录界面就是通过Bundle对象来存储登录信息,在完成登录后结束当前的Activity,并且通过Intent将结果返回到新的Activity中去

下面通过一个实例来介绍一下上面所讲的内容: 首先是一个xml布局文件

<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    

对应的MainActivity爪哇文件

import android.content.Intent;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.content.Intent;import android.util.Log;import android.view.View;import android.app.Activity;import android.widget.Button;import android.widget.Toast;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity {    private Button bt1;    private Button bt2;    private String getresult;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.first);        bt1 = (Button) findViewById(R.id.button_first1);        bt2 = (Button) findViewById(R.id.button_first2);        bt1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new Intent(MainActivity.this,second.class);                startActivity(intent);            }        });        bt2.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View view){                Intent intent= new Intent(MainActivity.this,second.class);                //这里启动startActivityForResultl方法,1是请求码                startActivityForResult(intent,1);            }        });    }    /*        通过startActivityForResultl来实现跳转  后面的Code 1是 要求码 requestCode        onActivityResult来接受返回结果以及做出处理  resultCode 是返回码        同过返回码和要求码来鉴别哪个页面的返回        接受返回数据的是 Intent的对象 data     */    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data){        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == 1 && resultCode == 2) {            Log.d("TAG", "aaaaa");            //这里引号中的data是key 钥匙的作用 对应于数据            Bundle data2 = getIntent().getExtras();            getresult = data.getStringExtra("data");        }    }}

可以看到,在MainActivity中定义了两个按钮,一个带返回值,另一个不带返回值,通过对比就可以看出两者的不同,两个按钮都是跳转到同一个界面
第二个布局:

<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    "match_parent"        android:layout_height="wrap_content"        android:text="第二个界面"        android:id="@+id/button_second1"        android:layout_gravity="center_horizontal" />    

以及第二个界面的代码:

import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import java.util.Timer;import java.util.TimerTask;/** * Created by Administrator on 2016/7/31 0031. */public class second extends AppCompatActivity {    private Button bt2;    private String returndata = "返回数据流 来second";    @Override    public void onCreate (Bundle savedInstanceState){        super.onCreate(savedInstanceState);        setContentView(R.layout.second);        bt2 = (Button) findViewById(R.id.button_second2);        bt2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent data = getIntent();                data.putExtra("data", returndata);                //通过setResult 来设置返回结果 2是返回码,data是Intent对面  也是数据流                setResult(2, data);                Log.d("TAG",  "第二个界面结束了");                //结束这个页面                finish();            }        });

更多相关文章

  1. Android Map Api 使用和开发(1) 添加地图和界面
  2. 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内
  3. 【Android 开发】: Android客户端与服务端之间使用GSON交互数据
  4. 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23
  5. Android遍历SqlLite cursor对象:
  6. Android 反射获得控件对象
  7. Android实现界面跳转

随机推荐

  1. 转:Android(安卓)发送短信的方法
  2. Android界面布局开发使用的标签介绍
  3. android ScrollView边界阴影方法
  4. android 开发对gif解码(适配android 4.2、
  5. RealtiveLayout(相对布局属性)
  6. ListView 常用属性 详解
  7. Android(安卓)Studio apk系统签名和版本
  8. Android控件之EditText(输入文本框控件)
  9. android:installLocation简析
  10. Android(安卓)图书总汇