1. Bundle 是什么?(通俗理解)
想象一下你要搬家,你需要一个打包箱来整理和运输你的物品:
-
Bundle 就是这个打包箱。
-
它是一个键值对(Key-Value)的容器,可以用来存放各种类型的数据。
-
你可以把数据“打包”进Bundle,然后带着这个Bundle去另一个地方,再“拆包”取出数据。
2. Bundle 能装什么?
这个“打包箱”可以装很多不同类型的数据,比如:
-
String(字符串) -
int(整数) -
float(浮点数) -
boolean(布尔值) -
Parcelable对象 (Android特有的可序列化对象,如Intent)
3. Bundle 的常用方法
存数据(打包):
// 创建一个Bundle
Bundle bundle = new Bundle();
// 往Bundle里存放数据
bundle.putString("name", "张三"); // 键为"name",值为"张三"
bundle.putInt("age", 20); // 键为"age",值为20
bundle.putBoolean("isStudent", true); // 键为"isStudent",值为true
取数据(拆包):
// 从Bundle中取出数据
String name = bundle.getString("name"); // 根据键"name"取出值
int age = bundle.getInt("age"); // 根据键"age"取出值
boolean isStudent = bundle.getBoolean("isStudent"); // 根据键"isStudent"取出值
// 取数据时可以设置默认值,如果找不到该键,就返回默认值
String nickname = bundle.getString("nickname", "未知"); // 如果找不到"nickname",就返回"未知"
int score = bundle.getInt("score", 0); // 如果找不到"score",就返回0
4. Bundle 最常见的用途
用途一:在 Activity 之间传递数据(最常用!)
场景:从MainActivity跳转到DetailActivity,并传递一些数据。
在MainActivity中(打包并发送):
// 创建Intent,用于跳转页面
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
// 创建Bundle并存入数据
Bundle bundle = new Bundle();
bundle.putString("userName", "李四");
bundle.putInt("userId", 1001);
// 将Bundle附加到Intent上
intent.putExtras(bundle);
// 启动新的Activity
startActivity(intent);
在DetailActivity中(接收并拆包):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
// 从Intent中获取Bundle
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
// 从Bundle中取出数据
String userName = bundle.getString("userName");
int userId = bundle.getInt("userId", 0); // 0是默认值
// 使用这些数据...
TextView tv = findViewById(R.id.text_view);
tv.setText("用户名:" + userName + ",ID:" + userId);
}
}
用途二:保存和恢复 Activity 的状态
场景:当手机旋转屏幕时,Activity会被销毁并重新创建,这时可以用Bundle来保存临时数据。
public class MainActivity extends AppCompatActivity {
private String mTempData; // 临时数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查是否有之前保存的状态
if (savedInstanceState != null) {
// 恢复之前保存的数据
mTempData = savedInstanceState.getString("temp_data");
}
}
// 在Activity即将被销毁时调用,用于保存状态
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 保存需要恢复的数据
outState.putString("temp_data", mTempData);
}
}
总结
| 比喻 | 实际概念 |
|---|---|
| 打包箱 | Bundle |
| 往箱子里放物品 | bundle.putString("key", "value") |
| 从箱子里取物品 | bundle.getString("key") |
| 把箱子交给快递员 | intent.putExtras(bundle) |
| 收件人拆箱 | getIntent().getExtras() |
简单来说:Bundle就是一个用于在Android不同组件之间传递数据的、可以存放多种数据类型的容器。

被折叠的 条评论
为什么被折叠?



