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

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布局文件

"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中定义了两个按钮,一个带返回值,另一个不带返回值,通过对比就可以看出两者的不同,两个按钮都是跳转到同一个界面
第二个布局:

"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();
            }
        });

你可能感兴趣的:(Android)