您的位置:首页 > 其它

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接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: