Intent传递数据 (得到返回数据)
2015-11-10 10:31
351 查看
一、一个Activity启动另一个Activity
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
二、一个Activity数据传递到另一个Activity
1、通过setFlags(int flags)方法
主Activity:
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.setFlags(1000);
startActivity(intent);
第二个Activity:
//获得setFlag传递的整形数据
int flags=getIntent().getFlags();
//转化为字符串
String sFlags=String.valueOf(flags);
textView.setText(sFlags);
注:此方法只能传递整形的数据(一般不用于传递数据),常用方式:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//用于添加额外的控制旗标。
2、通过Intent.putExtra(String name, String value)方法
主Activity:
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("name", "zhangsan");
intent.putExtra("age", "23");
startActivity(intent);
第二个Activity:
Intent intent=getIntent();
String name=intent.getStringExtra("name");
String age=intent.getStringExtra("age");
textView.setText("name:"+name+"\nage:"+age);
注:此方法对于没有实现序列化接口的类型无法使用,如Integer、Double、Float、Short
3、通过Bundle绑定数据方法(推荐使用)
主Activity:
Bundle bundle=new Bundle();
bundle.putString("name", "张三");
bundle.putInt("age", 26);
Intent intent=new Intent(MainActivity.this,ThridActivity.class);
//使用bundle传递数据
intent.putExtras(bundle);
startActivity(intent);
第二个Activity:
Bundle bundle=this.getIntent().getExtras();
String name=bundle.getString("name");
int age=bundle.getInt("age");
textView.setText("name:"+name+"\nage:"+age);
注:此方法最常用。
三、跳转Activity返回数据到主Activity
主Activity:
Bundle bundle=new Bundle();
bundle.putString("userName", "zhangsan");
bundle.putInt("userAge", 100);
Intent intent=new Intent(MainActivity.this,ForthActivity.class);
intent.putExtras(bundle);
startActivityForResult(intent, 1);//
第二个Activity:
Intent intent=new Intent();
intent.putExtra("backData", "这是返回主Activity的数据");
setResult(RESULT_OK, intent);//回传数据到主Activity
finish(); //此方法后才能返回主Activity
主Activity接收回传数据,重写onActivityResult()方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode){
case RESULT_OK:
Bundle bundle=data.getExtras();
String str=bundle.getString("backData");
Toast.makeText(MainActivity.this, str, 1).show();
break;
default:
break;
}
四、Activity传递对象
主Activity:
person=new Person();
person.setName("zhangsan");
person.setSex("male");
person.setAge(80);
Bundle bundle=new Bundle();
bundle.putSerializable("person", person);//该方法传递对象
//或者putParcelable(key,object)方法
Intent intent=new Intent(MainActivity.this,FiveActivity.class);
intent.putExtras(bundle);
startActivity(intent);
第二个Activity:
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
Person person=(Person) bundle.getSerializable("person");//获得传递的对象
tv.setText(person.toString());
对象Person方法://要实现Serializable接口,定义变量及方法省略
public class Person implements Serializable{ }
总结:
a. startActivity():跳转到目标页面,若想跳回当前页面,必须再一次使用startActivity()。
b. startActivityForResult():可一次性完成返回跳转,Activity可接收返回数据。
c. 可以通过Bundle传递对象,但传递的对象要实现Serializable接口。
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
二、一个Activity数据传递到另一个Activity
1、通过setFlags(int flags)方法
主Activity:
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.setFlags(1000);
startActivity(intent);
第二个Activity:
//获得setFlag传递的整形数据
int flags=getIntent().getFlags();
//转化为字符串
String sFlags=String.valueOf(flags);
textView.setText(sFlags);
注:此方法只能传递整形的数据(一般不用于传递数据),常用方式:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//用于添加额外的控制旗标。
2、通过Intent.putExtra(String name, String value)方法
主Activity:
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("name", "zhangsan");
intent.putExtra("age", "23");
startActivity(intent);
第二个Activity:
Intent intent=getIntent();
String name=intent.getStringExtra("name");
String age=intent.getStringExtra("age");
textView.setText("name:"+name+"\nage:"+age);
注:此方法对于没有实现序列化接口的类型无法使用,如Integer、Double、Float、Short
3、通过Bundle绑定数据方法(推荐使用)
主Activity:
Bundle bundle=new Bundle();
bundle.putString("name", "张三");
bundle.putInt("age", 26);
Intent intent=new Intent(MainActivity.this,ThridActivity.class);
//使用bundle传递数据
intent.putExtras(bundle);
startActivity(intent);
第二个Activity:
Bundle bundle=this.getIntent().getExtras();
String name=bundle.getString("name");
int age=bundle.getInt("age");
textView.setText("name:"+name+"\nage:"+age);
注:此方法最常用。
三、跳转Activity返回数据到主Activity
主Activity:
Bundle bundle=new Bundle();
bundle.putString("userName", "zhangsan");
bundle.putInt("userAge", 100);
Intent intent=new Intent(MainActivity.this,ForthActivity.class);
intent.putExtras(bundle);
startActivityForResult(intent, 1);//
第二个Activity:
Intent intent=new Intent();
intent.putExtra("backData", "这是返回主Activity的数据");
setResult(RESULT_OK, intent);//回传数据到主Activity
finish(); //此方法后才能返回主Activity
主Activity接收回传数据,重写onActivityResult()方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode){
case RESULT_OK:
Bundle bundle=data.getExtras();
String str=bundle.getString("backData");
Toast.makeText(MainActivity.this, str, 1).show();
break;
default:
break;
}
四、Activity传递对象
主Activity:
person=new Person();
person.setName("zhangsan");
person.setSex("male");
person.setAge(80);
Bundle bundle=new Bundle();
bundle.putSerializable("person", person);//该方法传递对象
//或者putParcelable(key,object)方法
Intent intent=new Intent(MainActivity.this,FiveActivity.class);
intent.putExtras(bundle);
startActivity(intent);
第二个Activity:
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
Person person=(Person) bundle.getSerializable("person");//获得传递的对象
tv.setText(person.toString());
对象Person方法://要实现Serializable接口,定义变量及方法省略
public class Person implements Serializable{ }
总结:
a. startActivity():跳转到目标页面,若想跳回当前页面,必须再一次使用startActivity()。
b. startActivityForResult():可一次性完成返回跳转,Activity可接收返回数据。
c. 可以通过Bundle传递对象,但传递的对象要实现Serializable接口。
相关文章推荐
- 环境配置三:Xcode Version 6.4 gtest环境搭建
- mac os x使用Git简易入门教程
- 神的规范:排序算法(四):快速排序
- 关于Android的布局管理器的理解
- 大牛博客收藏
- Android Studio导入项目的几种方法
- ubuntu如何分区
- SystemProperties cannot be resolved错误
- 腾讯产品总监曹菲:如何克服职业焦虑
- Sublime 3 中文乱码解决方法
- php实现图片base64加密和解密
- Java 回调函数
- QPS、PV 、RT(响应时间)之间的关系
- 为什么要配置Java环境变量
- 最大似然估计(MLE)和最大后验概率(MAP)
- A星寻路算法介绍
- DrawerLayout设置滑动边距
- LeetCode 040 Combination Sum II
- maven知识点
- MVC HtmlHelper用法大全