1. MainActivity:
1 package com.example.infotransmission; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.content.Intent; 6 import android.graphics.Bitmap; 7 import android.os.Bundle; 8 import android.view.View; 9 10 /** 11 * 第一个,实现基本的数据类型的传输. 12 * 第二个,实现对象的页面传输 13 */ 14 public class MainActivity extends AppCompatActivity { 15 16 @Override 17 protected void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.activity_main); 20 } 21 22 /** 23 * 该方法用于跳转到第二个界面 24 * @param view 25 */ 26 public void SkipToSecondActivity(View view){ 27 28 // 创建意图对象 29 Intent intent = new Intent(this, SecondaryActivity.class); 30 // 通过调用putExtra来实现数据传递,然后存储类型是键值对 31 intent.putExtra("intKey", 1000); 32 intent.putExtra("booleanKey", true); 33 startActivity(intent); 34 } 35 36 /** 37 * 这个方法把第一个界面的对象传递到第二个界面 38 * 步骤: 39 * 1. 先实现界面的跳转(创建intent意图) 40 * 2. 实例化一个对象,该对象要调用序列化接口 41 * 3. 调用putExtra方法传入对象 42 * 4. 在第二个界面通过getParcelableExtra方法与key获取到传递的对象 43 * @param view 44 */ 45 public void DeliverObjToSecondActivity(View view){ 46 47 Intent intent = new Intent(this, SecondaryActivity.class); 48 // 这里创建一个名为user的对象,并将其传递 49 // 意图传输对象的时候,需要序列化后的对象,所以要传输的对象需要实现序列化接口 50 User user = new User(); 51 user.setAge(22); 52 user.setName("Tom"); 53 user.setHeight(168.9f); 54 intent.putExtra("userKey", user); 55 // 同样的,也可以传输照片(通过BItMap) 56 Bitmap bitmap = null; 57 intent.putExtra("bitMap", bitmap); 58 startActivity(intent); 59 } 60 }
2. SecondActivity:
1 package com.example.infotransmission; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.util.Log; 7 8 import androidx.annotation.Nullable; 9 10 public class SecondaryActivity extends Activity { 11 private static final String TAG = "SecondaryActivity"; 12 13 @Override 14 protected void onCreate(@Nullable Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_second); 17 // 取得跳转到这个Activity的意图 18 Intent intent = getIntent(); 19 // 取值之前首先需要进行判空 20 if (intent != null) { 21 // 调用get'Type'Extra函数 22 // 第二个参数的定义: the value to be returned /if no value of the desire type is stored /with the given name. 23 // 即对于给定的键,如果没有存储想要的类型的值,那么就会返回defaultValue 24 // 对于数组来说,其本身是一个对象,如果数组的长度为空,那就会返回null,所以没有defaultValue 25 int intValue = intent.getIntExtra("intKey", 1); 26 Log.d(TAG, "int value == " + intValue); 27 boolean booleanValue = intent.getBooleanExtra("booleanKey", false); 28 Log.d(TAG, "boolean value == " + booleanValue); 29 } 30 31 User user = intent.getParcelableExtra("userKey"); 32 if (user != null) { 33 Log.d(TAG, "userName == " + user.getName()); 34 Log.d(TAG, "userAge == " + user.getAge()); 35 Log.d(TAG, "userHeight == " + user.getHeight()); 36 } 37 } 38 39 }
3. activity_main:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:orientation="vertical" 9 tools:context=".MainActivity"> 10 11 <Button 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:text="跳转到第二个界面" 15 android:onClick="SkipToSecondActivity"/> 16 17 <Button 18 android:layout_width="match_parent" 19 android:layout_height="wrap_content" 20 android:text="对象传递到另外一个界面" 21 android:onClick="DeliverObjToSecondActivity"/> 22 23 24 25 </LinearLayout>
界面效果如下:
选择第一个,logcat输出:
com.example.infotransmission D/SecondaryActivity: int value == 1000
com.example.infotransmission D/SecondaryActivity: boolean value == true
选择第二个,logcat输出:
com.example.infotransmission D/SecondaryActivity: int value == 1
com.example.infotransmission D/SecondaryActivity: boolean value == false
com.example.infotransmission D/SecondaryActivity: userName == Tom
com.example.infotransmission D/SecondaryActivity: userAge == 22
com.example.infotransmission D/SecondaryActivity: userHeight == 168.9
(千万不能忘记在Manifest中注册!)