跳转至

07 Intent 页面跳转与传值

一个 App 通常有多个页面(多个 Activity),页面之间靠 Intent 跳转和传数据。

7.1 新建第二个页面

  1. 右键 java/你的包名 → New → Activity → Empty Views Activity,命名 DetailActivity;
  2. 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 常用)

本章练习:主页输入框输入文字,点按钮跳到详情页并显示该文字;详情页点"返回并带结果",主页显示带回的内容。

🏠 返回总站