Activity系列讲解---数据传递
在Android中,不同的Activity实例可能运行在一个进程中,也可能运行在不同的进程中。因此需要一种特别的机制帮助我们在Activity之间传递消息。Android中通过Intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的地,还可以包含消息的内容,好比一封Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个Intent对象,消息“目的地”是必须的,而内容是可选的。
1.数据传递的两种方式:
2.对象的传递:
(1)实现Serializable接口,intent.putExtra(String name,Serializable value)
(2)实现Parcelable接口,intent.putExtra(String name,Parcelable value)
3.代码实现
(1)FirstActivity.class
- /**
- * Activity传递数据的两种方式:
- * 1.直接通过Bundle对象来传递
- * 2.使用Intent定义的Bundle对象
- */
- public class FirstActivity extends AppCompatActivity {
- private EditText ed;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_first);
- ed = (EditText) findViewById(R.id.et_data_name);
- }
- //传递基本数据
- public void sendDataClick(View view){
- String info = ed.getText().toString();
- Intent intent = new Intent(this,SecondActivity.class);
- //1.直接通过Bundle对象来传递
- /* Bundle bundle = new Bundle();
- bundle.putString("info",info);
- intent.putExtra("data",bundle);*/
- //2.使用Intent定义的Bundle对象
- intent.putExtra("info",info);
- startActivity(intent);
- }
- //传递对象一
- public void sendObjectOneClick(View view){
- Cat cat = new Cat();
- cat.name = "波斯猫";
- cat.age = 5;
- cat.type = "英短";
- Intent intent = new Intent(this,SecondActivity.class);
- //putExtra(String name,Serializable value)---Cat.class必须实现Serializable接口
- intent.putExtra("cat",cat);
- startActivity(intent);
- }
- //传递对象二
- public void sendObjectTwoClick(View view){
- Dog dog = new Dog();
- dog.name = "乐乐";
- dog.age = 6;
- dog.type = "哈士奇";
- Intent intent = new Intent(this,SecondActivity.class);
- //putExtra(String name,Parcelable value)---Dog.class必须实现SerializableParcelable接口
- intent.putExtra("dog",dog);
- startActivity(intent);
- }
- }
(2)SecondActivity.class
- public class SecondActivity extends AppCompatActivity {
- private TextView tv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_second);
- tv = (TextView) findViewById(R.id.tv_data_display);
- Intent intent = getIntent();
- //1.直接通过Bundle对象来传递
- /*
- Bundle data = intent.getBundleExtra("data");
- String ret = data.getString("info");*/
- //2.使用Intent定义的Bundle对象
- String ret = intent.getStringExtra("info");
- Cat cat = (Cat) intent.getSerializableExtra("cat");
- Dog dog = (Dog) intent.getParcelableExtra("dog");
- tv.setText(dog.toString());
- }
- }
(3)activity_first.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context="com.langdon.taiyang.androidtest.activity.FirstActivity">
- <EditText
- android:id="@+id/et_data_name"
- android:hint="请输入信息"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- <Button
- android:id="@+id/bt_data_send"
- android:text="发送"
- android:onClick="sendDataClick"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- <Button
- android:id="@+id/bt_data_send_object"
- android:text="传递对象一"
- android:onClick="sendObjectOneClick"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- <Button
- android:id="@+id/bt_data_send_data"
- android:text="传递对象二"
- android:onClick="sendObjectTwoClick"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
(4)activity_second.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.langdon.taiyang.androidtest.activity.SecondActivity">
- <TextView
- android:id="@+id/tv_data_display"
- android:text="no data"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
(5)Cat.class
- /**
- * Cat实现Serializable接口,
- * intent.putExtra(String name,Serializable value)---Cat.class必须实现Serializable接口
- */
- public class Cat implements Serializable {
- public String name;
- public int age;
- public String type;
- @Override
- public String toString() {
- return "Cat{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", type='" + type + '\'' +
- '}';
- }
- }
(6)Dog.class
- /**
- * Dog实现Parcelable接口,
- * intent.putExtra(String name,Parcelable value)---Cat.class必须实现Parcelable接口
- */
- public class Dog implements Parcelable{
- public String name;
- public int age;
- public String type;
- @Override
- public String toString() {
- return "Dog{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", type='" + type + '\'' +
- '}';
- }
- //描述内容
- @Override
- public int describeContents() {
- return 0;
- }
- //将传入的数据写到包裹里面(Parcel)
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(name);
- dest.writeInt(age);
- dest.writeString(type);
- }
- //对象的创建器
- public static final Parcelable.Creator<Dog> CREATOR
- = new Parcelable.Creator<Dog>() {
- public Dog createFromParcel(Parcel in) {
- Dog dog = new Dog();
- dog.name = in.readString();
- dog.age = in.readInt();
- dog.type = in.readString();
- return dog;
- }
- public Dog[] newArray(int size) {
- return new Dog[size];
- }
- };
- }
Activity系列讲解---数据传递的更多相关文章
- activity之间的数据传递方法
1 基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...
- Activity之间的数据传递
最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...
- Android学习之Activity之间的数据传递
Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...
- Activity之间的数据传递-android学习之旅(四十七)
activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...
- Android 数据传递(一) Activity之间的数据传递
bundle Google Bundle类说明 Bundle类是一个key-value对.Activity之间的数据通信可以通过bundle类来实现数据的存储.即将数据放入bundle里面,将Bund ...
- Activity系列讲解---返回结果的处理
设想一下:由当前Activity跳转到其它Activity,从其它Activity再返回到当前Activity时,如何获取其它Activity存放的数据?下面用一个例子讲解, 点击selsect按钮跳 ...
- Activity与Fragment数据传递之Fragment从Activity获取数据
整理Fragment与Activity之间的数据交换,大体上包括三种: 1.Fragment从Activity获取数据 2.Activity从Fragment获取数据 3.Fragment之间获取数据 ...
- Android笔记——Activity中的数据传递案例(用户注冊)
1.创建程序activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- Android Activity之间的数据传递
1.向目标Activity传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 intent.putExtra( ...
随机推荐
- [LeetCode] Anagrams 错位词
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...
- [开源].NET高性能框架Chloe.ORM-完美支持SQLite
扯淡 这是一款轻量.高效的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq(但不支持 Linq).借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接查询.分组查询. ...
- websocket初探
本文尚未完成,在此只写一些句子,以后慢慢整理. 一.参数 IllegalArgumentException No payload parameter present on the method[mes ...
- JavaScript简单对象的定义方法
工厂模式: 初级开发者可能会这样定义对象: var obj = new Object(); obj.name = "hero"; obj.showName=function (){ ...
- 理解OAuth 2.0
转自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...
- 学习ASP.NET 5和MVC6
今天很荣幸的参加了微软开源跨平台讲座,充分认识了下一个版本的ASP.NET所带来的激动人心的特性.虽然过去已经断断续续的了解了一些ASP.NET5和MVC6与EF7的动态,但是都没有这一次来的系统化( ...
- java script 基础知识
方法:提供信息 函数去处理 给出一个结果 字符类型. 字符提前赋类型 int i=1; money x; float;datetime; decimal;var 万用类型 var a = 1; 1赋值 ...
- 在Windows平台上绿色安装postgresQL
本文使用案例:postgresql-9.6.0-beta3-windows-x64-binaries.rar (win64免安装) 环境:window10,postgresql-9.6.0-beta3 ...
- FastDFS 通过文件名获取文件信息
/** * 获取文件信息 * * param string group_name 文件所在的组名 * param string file_id 文件id(如: M00/09/BE/rBBZolgj6O ...
- java学习笔记之线程1
1.线程的概念 线程是系统中最小的执行单元,同一进程有多个线程,多个线程共享进程的资源. 线程调用yield()方法使线程从运行状态转入可运行状态,让出资源: 线程调用sleep()方法使线程由运行状 ...