07 Intent 页面跳转与传值¶
一个 App 通常有多个页面(多个 Activity),页面之间靠 Intent 跳转和传数据。
7.1 新建第二个页面¶
- 右键
java/你的包名→ New → Activity → Empty Views Activity,命名DetailActivity; - AS 会自动生成
DetailActivity.java+activity_detail.xml,并在 Manifest 注册。
7.2 显式 Intent 跳转(最常用)¶
// MainActivity 中:
Intent intent = new Intent(this, DetailActivity.class);
startActivity(intent);
this= 当前页面;DetailActivity.class= 目标页面;- 跳转后原页面默认还在(在返回栈里),按返回键可回到上一页。
7.3 跳转并传值¶
发送方(MainActivity):
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("name", "张三"); // String
intent.putExtra("age", 18); // int
intent.putExtra("data", someSerializable); // 需要实现 Serializable/Parcelable
startActivity(intent);
接收方(DetailActivity):
String name = getIntent().getStringExtra("name");
int age = getIntent().getIntExtra("age", 0); // 第二个参数是默认值
7.4 跳转并要返回结果¶
发送方:
// 1. 用 startActivityForResult 起跳(或新版 registerForActivityResult)
Intent intent = new Intent(this, DetailActivity.class);
startActivityForResult(intent, 100); // 100 是请求码,用于区分哪个页面返回的
接收方返回数据:
// DetailActivity 中,处理完点返回:
Intent result = new Intent();
result.putExtra("result", "这是详情页带回的数据");
setResult(RESULT_OK, result); // RESULT_OK = -1
finish(); // 关闭自己,回到上一个页面
发送方接收回调(MainActivity 重写):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK && data != null) {
String result = data.getStringExtra("result");
tvResult.setText(result);
}
}
⚠️
startActivityForResult在新版本中被标记废弃,推荐用registerForActivityResult(ActivityResultContracts.StartActivityForResult(), ...)。本教程为入门易懂先讲经典写法,进阶可自行换新 API。
7.5 隐式 Intent(系统能力)¶
不指定具体页面,而是声明"我想干什么",让系统挑能干的 App:
// 打开浏览器
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://docx.ffsmcserver.top/"));
startActivity(intent);
// 拨号(不直接拨出,跳到拨号盘)
Intent dial = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:10086"));
startActivity(dial);
// 打开系统设置
startActivity(new Intent(Settings.ACTION_SETTINGS));
7.6 常用:页面关闭与返回¶
finish(); // 关闭当前 Activity
finishAffinity(); // 关闭当前任务栈里所有 Activity(一键退出 App 常用)
本章练习:主页输入框输入文字,点按钮跳到详情页并显示该文字;详情页点"返回并带结果",主页显示带回的内容。