您的位置:首页 > 移动开发 > Android开发

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

2017-06-10 00:37 756 查看

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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Intent无返回形式跳转页面"
android:id="@+id/button_first1" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳转到第二个界面"
android:id="@+id/button_first2" />
</LinearLayout>


对应的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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<com.example.administrator.itentlearn.MySecondButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="第二个界面"
android:id="@+id/button_second1"
android:layout_gravity="center_horizontal" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="附带返回值的返回按钮"
android:id="@+id/button_second2" />
</LinearLayout>


以及第二个界面的代码:

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中Activity之间的数据传递和Intent使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐