Activity系列——使用Bundle交换数据
2020-02-10 本文已影响0人
似焰如火
1. 常见的情景
我们一般会在一个Activity中使用Intent去启动另一个Activity,当这两个Activity需要传递一些数据时,就可以借助Intent来实现,Intent就像一个邮递员,我们只需将信封(就是Bundle)交给他,让他帮我们送达即可。
2. 怎么使用
2.1 Intent邮递员
我们有好多方式可以将信件(Bundle)给到Intent邮递员,并且这个哥哥不仅可以帮你送信,给你捎个话也是可以的。那么先看下Intent咋用:
- putExtras(Bundle data),寄信
- putExtra(String name, Xxx value ),写信太麻烦?捎个话就行,Xxx可以是int、long等各种数据类型
这个Intent送到信后,需要对方自己取(看看这就是最后一公里问题啊),那么对方取件要有对应的方法才能取出,对应的方法:
- Bundle getExtras(),取信
- gettExtra(String name),报名字,给你话儿
2.2 Bundle 信封
我们寄信不会把信纸直接给邮递员,一般我们都会先把它装进信封(不然小秘密全被邮递员看光光),这里的信封就是Bundle。我们需要把信纸装进信封,这时就有许多方法可供选择
- putXxx(String key, Xxx value ),Xxx可以是int、long等各种数据类型
- putSerializable(String key, Serializable value),传送一个可序列化的对象
对方拿到信件后需要拆开信封看内容,自然就有对应的方法
- getXxx(String key )
- getSerializable(String key)
2.3 看个例子
实现功能,Activity_A启动Activity_B,并给B传递一个身高数值,由B将其在TextView上显示。
发送方
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bundle data = new Bundle();
data.putFloat("height",185.3f);
Intent intent = new Intent(MainActivity.this, myActivity.class);
intent.putExtras(data);
startActivity(intent);
}
接收方
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
Bundle data = intent.getExtras();
Float height = data.getFloat("height");
show = findViewById(R.id.show);
show.setText(height.toString());
}