Bundle知识点

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不同组件之间传递数据的、可以存放多种数据类型的容器。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值