- Intent 方法传输简单数据
- Bundle 方法传输复杂数据
- 多个Activity之间传递值对象
获取Activity传回的数据
Intent 方法传输简单的数据
实际上Intent方法是一个Activity开启另一个Activity的常用方法。
通过Intent的方法传输一个简单的数据并打开一个Activity。
1.在主Activity中设置一个按钮,并初始化。
private Button openBtn;//声明按钮
...
openBtn = (Button) findViewById(R.id.openBtn);//初始化按钮
...
2.再在按钮点击处理中进行
openBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,SecondActivity.class);//实例并初始化一个Intent对象,参数为,本Activity和需要打开的哪一个Activity类名字
i.putExtra("data","I send you a message!"); //设置这个信息的名字和需要传递的值,信息的名字就是在另一个Activity取出的的辨识名字
//i.putExtra(String name,String value)
startActivity(i);
}
});
3.在已经打开的另一个Activity中取出传输的数据
private TextView tv;//声明一个按钮
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i = getIntent();//声明一个Intent,赋给一个“getIntent()”
tv = (TextView) findViewById(R.id.tv);
tv.setText(i.getStringExtra("data"));//Intent的i获得的“getStringExtra()”的名字就是父Activity中“put...”方法中设置的名字
}
至此已经实现了一个Intent的数据在Activity之间的传输。
另外 Intent i的PutExtra()方法有20多种重载函数,可以传递很多种类型的值。
Bundle方法传输复杂数据
Bundle的方法是在Intent方法的基础上扩展。Bundle只是一个集合进行一些数据上的整合而已,传输还是要靠Intent方法!
主Activity设置Bundle数据源
private Button openBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
openBtn = (Button) findViewById(R.id.openBtn);
openBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,SecondActivity.class);
Bundle b = new Bundle();
b.putString("data","Information of Student!");//字符串类型
b.putInt("age",22);//整型。。。还有更多的都可以
i.putExtras(b);//还是要通过Intent的对象进行传递,需要注意
startActivity(i);
}
});
}
在另一个Activity里面获得Bundle数据
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i = getIntent();//获取Bundle的方法
Bundle data = i.getExtras();//另一个Bundle数据还是要通过Intent对象获得
tv = (TextView) findViewById(R.id.tv);
tv.setText(String.format("name = %s,age = %d",data.getString("data"),data.getInt("age")));
}
通过Intent进行传输正如前面所说的还有很多方法,Bundle打包数据,Intent 对象传输还有很多函数可以用,要看具体的需求,举一反三!