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使用
相关文章推荐
- Android开发之使用Intent在Activity之间传递数据
- Android中Activity之间的数据传递和Intent使用
- android 开发手记 activity 之间数据的传递 intent 对象的使用
- android中使用Intent在activity之间传递数据
- android中使用Intent在activity之间传递数据
- Android入门篇三:使用静态变量在Activity之间传递数据
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲述了Android中不同Activity之间的数据传递 — Bundle对象的实现(-)+Android中Bundle的使用示例
- Android入门篇三:使用静态变量在Activity之间传递数据
- Android: 用Intent实现Activity之间数据传递
- Android Intent对象使用和Activity间数据的传递
- 【Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用】的改进!
- Android学习备忘010——使用静态变量在Activity之间传递数据
- Android入门篇四:使用全局变量在Activity之间传递数据
- Android入门篇五:使用全局变量在Activity之间传递数据
- Android入门篇二:使用意图在Activity之间传递数据
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- android 之 在Activity之间传递数据(使用意图传递数据之通用方式:)
- Android中在Activity之间传递数据的另一种方法, 使用application context