您的位置:首页 > 其它

如何在两个Activity之间传递数据?

2015-10-10 20:42 344 查看

如何在两个Activity之间传递数据?

1、用Intent.putTExra(“name”,”data”)传递数据

MainActivity.java部分代码

界面设计部分有一个Button组件,点击这个btnStartAty的Button会跳到Aty这个Activity,所以在Button上加了onClickListener

findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MainActivity.this,TheAty.class);
i.putExtra("data","Hello weiyongqiang ");
startActivity(i);
}
});


TheAty.java关键部分代码

public class TheAty extends AppCompatActivity {

private TextView tv;//这个tv在UI设计阶段已经被添加进了TheAty

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Intent i =getIntent();
tv = (TextView) findViewById(R.id.tv);
//这里的getStringExtra中的参数data就是上面的“Helloweiyongqiang”的名字
tv.setText(i.getStringExtra("data"));
}


2、用Bundle传递数据包

MainActivity.java

findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MainActivity.this,TheAty.class);
Bundle b = new Bundle();
b.putString("name","weiyongqang");
b.putInt("age",2);
//这里Bundle.putXXX()有很多种中类型
//i.putExtra("name",b);   2nd 方法
i.putExtra(b);
startActivity(i);
}
});


TheAty.java

其他部分和上面的代码不变,只记录关键的变化部分

Intent i = getIntent();
Bundle data = i.getExtras();
//Bundle data = i.getBundleExtra("data"); 2nd方法
tv = (TextView) findViewById(R.id.tv);
tv.setText(String.format("name=%s,age=%d",
data.getString("name"),data.getInt("age")));


3、传递值对象

传递自定义的数据类型

写一个User类

public class User implements Serializable{
private String name;
private int age;
public int getAge() {
return age;
}

public  void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public User(String name,int age) {
this.age=age;
this.name=name;
}


Main.java

Intent i = new Intent(MainActivity.this,TheAty.class);
i.putExtra("user",new User("hello Android",2));


这里需要注意的是直接按照上面写在putExra这里会产生错误,解决办法是让user类继承Serializable,后者是java中用来解决序列化数据的类

TheAty

Intent i = getIntent();
User user = (User) i.getSerializableExtra("user");//user是Main中起的名字
tv.setText(String.format("User info(name
= %s,age=%d)",user.getName(),user.getAge()));


以上就是三种方法,其中方法3还可以让User继承Parcelable类来实现自定义数据的传递,但后者实现起来不如前者方便,所以我略了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: