Activity之间传值方法
先创建A.B两个Activiy,在A与B中分别创建一个按钮button,同时分别创建文本框TextView
Intent传值
在A activity中创建按钮监听
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {//创建一个Intent,能够打开B Activiy Intent i = new Intent(MainActivity.this,Main2Activity.class); //传入数据,参数一传数据名 参数二传数据 i.putExtra("tag","hello world"); startActivity(i); } });在B activity获取到数据
private TextView txView; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent i = getIntent(); txView = (TextView) findViewById(R.id.TxView); txView.setText(i.getStringExtra("data")); }
Bundle数据包传值
在A activity中创建按钮监听
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {Intent i = new Intent(MainActivity.this,Main2Activity.class); Bundle b = new Bundle(); b.putInt("int",123); b.putString("string","hello world"); //可以直接添加到B i.putExtras(b); //也可以传递Bundle i.putExtra("bundle",b); startActivity(i); } });
在B activity获取到数据
Intent i = getIntent(); Bundle data = i.getExtras(); txView = (TextView) findViewById(R.id.TxView); //若没有值,可以设置默认值 txView.setText( String.format("int = %d string = %s name = %s",data.getInt("int"),data.getString("string"),data.getString("name","default"))); //通过key查找bundle Bundle data1 = i.getBundleExtra("bundle");
传递自定义类
//传递类时,两种方法,Serializable和Parcelable //Serializable直接在初始化时传递就可以(速度慢,使用简单) //Parcelable需要实现系统的两个方法(速度快,比较支持,使用复杂)
创建class类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.name = name; this.age = age; } }
在A activity中
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {Intent i = new Intent(MainActivity.this,Main2Activity.class); i.putExtra("user",new User("123",3)); startActivity(i); } });
在B activity中获取
User user = (User)i.getSerializableExtra("123"); txView.setText(String.format("%s %d",user.getName(),user.getAge()));
使用Parcelable传递类时
public class User implements Parcelable{private String name; private int age; protected User(Parcel in) {name = in.readString(); age = in.readInt(); }@Override public void writeToParcel(Parcel dest, int flags) {//保存数据 dest.writeString(name); dest.writeInt(age); }@Override public int describeContents() {return 0; } //创建Creator public static final Creator<User> CREATOR = new Creator<User>() {@Override public User createFromParcel(Parcel in) {//in.readBundle()使用bundle可以写任意数据 //修改返回值 return new User(in.readString(),in.readInt()); }@Override public User[] newArray(int size) {return new User[size]; }}; 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.name = name; this.age = age; } }
获取来自B activity的返回值
在button监听里面添加
Intent i = new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(i,0);
重写方法
//resultCode为result的返回码,data为Intent返回的数据 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data); data.getStringExtra("data"); }