据我总结Intent传值的有四种方法
第一中普通的Intent传值
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putExtra("name", "王五");
intent.putExtra("age", 18);
startActivity(intent);
接收
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 0);
第二种利用Bundle进行传值
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "李四");
bundle.putInt("age", 18);
intent.putExtras(bundle);
startActivity(intent);
接收
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
第三种利用对象传值
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
StudentsInfo info = new StudentsInfo("小李", 19, false);
intent.putExtra("info", info);
startActivity(intent);
对象的类
package com.example.intent01;
import java.io.Serializable;
/**
* Created by song on 2016/12/14.
*/
public class StudentsInfo implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private boolean hasXf;
public StudentsInfo(String name, int age, boolean hasXf) {
this.name = name;
this.age = age;
this.hasXf = hasXf;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isHasXf() {
return hasXf;
}
public void setHasXf(boolean hasXf) {
this.hasXf = hasXf;
}
}
这个要传值的对象一定要实现Serialicable这接口 这里叫做序列化
1 什么是序列化
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
接收
Intent intent = getIntent();
StudentsInfo info = (StudentsInfo) intent.getSerializableExtra("info");
String name = info.getName();
int age = info.getAge();
第四种利用application传值
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
MyApp app = (MyApp) getApplication();
app.name = "张三";
app.age = 20;
startActivity(intent);
这里的MyApp同样要新建立一个类
package com.example.intent01;
import android.app.Application;
/**
* Created by song on 2016/12/14.
*/
public class MyApp extends Application {
public String name;
public int age;
}
然后还要在清单文件中添加一条name的属性如下
接收
MyApp app = (MyApp) getApplication();
String name = app.name;
int age = app.age;
这里已经算不上是接收了 这里只是将已经被赋值的MyApp实现了而已
下面是传值的案例