当前位置: 首页 > news >正文

《Android 应用开发基础教程》——第四章:Intent 与 Activity 跳转、页面传值

目录

第四章:Intent 与 Activity 跳转、页面传值(Java 版)

4.1 什么是 Intent?

4.2 显式 Intent 与隐式 Intent

4.3 两个页面之间跳转示例

1️⃣ 主页面 MainActivity

2️⃣ 目标页面 SecondActivity

3️⃣ 注册 Activity(AndroidManifest.xml)

4.4 页面传值(传参)

主页面传值给 SecondActivity

SecondActivity 中接收参数

4.5 使用 Bundle 传递多个值

SecondActivity 接收:

4.6 从 SecondActivity 返回结果

1️⃣ MainActivity 启动方式:

2️⃣ SecondActivity 设置返回数据:

3️⃣ MainActivity 中接收结果:

4.7 常见问题总结

​编辑

习题答案

1. 两个 Activity,点击按钮将输入的姓名传递到第二个页面并显示

MainActivity.java

SecondActivity.java

activity_main.xml

activity_second.xml

2. 使用 Bundle 传递一组学生信息(姓名、年龄、学号)

MainActivity.java

SecondActivity.java

activity_main.xml 和 activity_second.xml

3. 页面 A 跳转页面 B,用户输入内容后返回 A 并显示

ActivityA.java

ActivityB.java

activity_a.xml

activity_b.xml


第四章:Intent 与 Activity 跳转、页面传值(Java 版)


4.1 什么是 Intent?

Intent 是 Android 中的“意图”对象,主要用于:

  • 启动新的 Activity

  • 启动服务(Service)

  • 发送广播

Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

4.2 显式 Intent 与隐式 Intent

类型用途示例
显式 Intent明确指定目标 Activitynew Intent(this, TargetActivity.class)
隐式 Intent根据“动作”和“类别”匹配系统组件new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"))

4.3 两个页面之间跳转示例

1️⃣ 主页面 MainActivity

package com.example.myapp;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn = findViewById(R.id.button);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, SecondActivity.class);startActivity(intent); // 页面跳转}});}
}

2️⃣ 目标页面 SecondActivity

package com.example.myapp;import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;public class SecondActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);}
}

3️⃣ 注册 Activity(AndroidManifest.xml

<application ...><activity android:name=".SecondActivity" />
</application>


4.4 页面传值(传参)

主页面传值给 SecondActivity

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("username", "张三"); // 放入数据
startActivity(intent);

SecondActivity 中接收参数

String name = getIntent().getStringExtra("username");
TextView textView = findViewById(R.id.textView);
textView.setText("你好," + name);


4.5 使用 Bundle 传递多个值

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "张三");
bundle.putInt("age", 20);
intent.putExtras(bundle);
startActivity(intent);

SecondActivity 接收:

Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");


4.6 从 SecondActivity 返回结果

有时我们希望 SecondActivity 处理完后,返回数据给 MainActivity

1️⃣ MainActivity 启动方式:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 1); // 1 为请求码

2️⃣ SecondActivity 设置返回数据:

Intent result = new Intent();
result.putExtra("result", "操作成功!");
setResult(RESULT_OK, result);
finish(); // 结束当前页面

3️⃣ MainActivity 中接收结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1 && resultCode == RESULT_OK) {String msg = data.getStringExtra("result");Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();}
}


4.7 常见问题总结

问题解决方案
页面跳转后返回按钮不能用确保 startActivity() 用于普通跳转,startActivityForResult() 用于有结果返回的跳转
接收参数为 null检查 putExtra()getExtra() 的 key 是否一致
Activity 未注册报错AndroidManifest.xml 中添加 <activity> 标签

📌 练习题

  1. 编写两个 Activity,点击按钮将输入的姓名传递到第二个页面并显示

  2. 使用 Bundle 传递一组学生信息(姓名、年龄、学号)

  3. 编写一个页面 A,跳转页面 B,用户输入内容后返回 A 并显示


习题答案

1. 两个 Activity,点击按钮将输入的姓名传递到第二个页面并显示

MainActivity.java

package com.example.demo;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private EditText editTextName;private Button buttonSubmit;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editTextName = findViewById(R.id.editTextName);buttonSubmit = findViewById(R.id.buttonSubmit);buttonSubmit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String name = editTextName.getText().toString();// 创建 Intent 并传递数据Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtra("NAME", name);startActivity(intent);}});}
}

SecondActivity.java

package com.example.demo;import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;public class SecondActivity extends AppCompatActivity {private TextView textViewName;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);textViewName = findViewById(R.id.textViewName);// 获取传递的数据Bundle extras = getIntent().getExtras();if (extras != null) {String name = extras.getString("NAME");textViewName.setText("Hello, " + name);}}
}

activity_main.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"android:padding="16dp"><EditTextandroid:id="@+id/editTextName"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="Enter your name" /><Buttonandroid:id="@+id/buttonSubmit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Submit" />
</LinearLayout>

activity_second.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"android:gravity="center"android:padding="16dp"><TextViewandroid:id="@+id/textViewName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, "android:textSize="24sp" />
</LinearLayout>

2. 使用 Bundle 传递一组学生信息(姓名、年龄、学号)

MainActivity.java

package com.example.demo;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private Button buttonSendData;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);buttonSendData = findViewById(R.id.buttonSendData);buttonSendData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建 Bundle 并添加学生信息Bundle bundle = new Bundle();bundle.putString("NAME", "Alice");bundle.putInt("AGE", 20);bundle.putString("STUDENT_ID", "S12345");// 创建 Intent 并传递 BundleIntent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtras(bundle);startActivity(intent);}});}
}

SecondActivity.java

package com.example.demo;import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;public class SecondActivity extends AppCompatActivity {private TextView textViewStudentInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);textViewStudentInfo = findViewById(R.id.textViewStudentInfo);// 获取传递的 Bundle 数据Bundle bundle = getIntent().getExtras();if (bundle != null) {String name = bundle.getString("NAME");int age = bundle.getInt("AGE");String studentId = bundle.getString("STUDENT_ID");String info = "Name: " + name + "\nAge: " + age + "\nStudent ID: " + studentId;textViewStudentInfo.setText(info);}}
}

activity_main.xml 和 activity_second.xml

与上一部分类似,只需调整 TextView 的内容即可。


3. 页面 A 跳转页面 B,用户输入内容后返回 A 并显示

ActivityA.java

package com.example.demo;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;public class ActivityA extends AppCompatActivity {private TextView textViewResult;private Button buttonGoToB;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_a);textViewResult = findViewById(R.id.textViewResult);buttonGoToB = findViewById(R.id.buttonGoToB);buttonGoToB.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(ActivityA.this, ActivityB.class);startActivityForResult(intent, 1); // 使用 startActivityForResult}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1 && resultCode == RESULT_OK) {String result = data.getStringExtra("RESULT");textViewResult.setText("Result from B: " + result);}}
}

ActivityB.java

package com.example.demo;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;public class ActivityB extends AppCompatActivity {private EditText editTextInput;private Button buttonSubmit;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_b);editTextInput = findViewById(R.id.editTextInput);buttonSubmit = findViewById(R.id.buttonSubmit);buttonSubmit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String input = editTextInput.getText().toString();// 将输入结果返回给 ActivityAIntent resultIntent = new Intent();resultIntent.putExtra("RESULT", input);setResult(RESULT_OK, resultIntent);finish(); // 关闭当前 Activity}});}
}

activity_a.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"android:padding="16dp"><TextViewandroid:id="@+id/textViewResult"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Result from B will appear here"android:textSize="18sp" /><Buttonandroid:id="@+id/buttonGoToB"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Go to B" />
</LinearLayout>

activity_b.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"android:padding="16dp"><EditTextandroid:id="@+id/editTextInput"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="Enter something" /><Buttonandroid:id="@+id/buttonSubmit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Submit" />
</LinearLayout>

相关文章:

  • 退役淘汰的硬盘数据安全处置不可忽视-硬盘数据抹除清零
  • 【机器学习-线性回归-1】深入理解线性回归:机器学习中的经典算法
  • SQL_连续登陆问题
  • 【前端Skill】点击目标元素定位跳转IDE中的源代码
  • LLM大模型中的基础数学工具—— 约束优化
  • 一个很简单的机器学习任务
  • 技术视界 | 开源新视野: 人形机器人技术崛起,开源社区驱动创新
  • 消息队列知识点详解
  • 基于RK3588+FPGA+AI YOLO的无人船目标检测系统(一)概述
  • 每天五分钟机器学习:凸优化
  • SBTI科学碳目标认证有什么要求?SBTI认证的好处?
  • MES系统中标签模板设计框架与实现思路
  • C++常用函数合集
  • 考研单词笔记 2025.04.21
  • qt画一朵花
  • elasticsearch7.15节点磁盘空间满了迁移数据到新磁盘
  • 【系统架构设计师】信息安全的概念
  • 每天学一个 Linux 命令(30):cut
  • OpenFeign 使用教程:从入门到实践
  • 线性代数-矩阵的秩
  • 大卫·第艾维瑞谈历史学与社会理论②丨马克斯·韦伯与历史学研究
  • 江西九江市人大常委会原副主任戴晓慧主动交代问题,接受审查调查
  • 荣膺劳伦斯大奖实至名归,杜普兰蒂斯的传奇没有极限
  • 民政部:从未设立或批准设立“一脉养老”“惠民工程”项目,有关App涉嫌诈骗
  • 张文宏:加强基层医疗体系建设,提升传染病早期监测和预警能力
  • 上交所召开私募机构座谈会,与会机构:中国资产具备显著估值修复和提升潜力,将坚定持有