Activity 之间传递数据
基本类型:
- 整:byte short int long
- 浮点:float double
- 布尔:boolean
- 字符:char
引用类型:
1. String
2. 传递数据包Bundle (集装箱)
3. 传递对象(对象集合)
4. 返回数据
代码示例
单项传递
普通数据传递
A页面
//参数一为,从哪个Activity开始跳的, 参数二为,目的地Activity
Intent intent=new Intent(this,Test_Fragment.class);
//intent 带值过去,参数一:为键,可随意填写
// 参数二:要传递的值 ,值,支持八大数据类型, 及引用类型(例如:String 数组,以及自定义的数据类型)
intent.putExtra("参数",23);
//跳转
startActivity(intent);
B页面
//取到 intent 带过来的值 ,输入键,取getStringExtra("键") 你取得数据类型是什么,就调用对应的方法
getIntent().getStringExtra("参数");
数据打包传递
特点,可以传递多个值
A页面
//参数一为,从哪个Activity开始跳的, 参数二为,目的地Activity
Intent intent=new Intent(this,Test_Fragment.class);
//建立一个集装箱
Bundle bundle=new Bundle();
//包中可设置进入多个参数,此处我只设置了一个
bundle.putInt("整型",23);
//把包,放入Intent(意图) 中
intent.putExtra("集装箱",bundle);
//带值跳转
startActivity(intent);
B页面
//从跳转,中取到,集装箱 ,参数为,我此前跳转前的 “键”
Bundle bundleTwo=getIntent().getBundleExtra("集装箱");
//然后,再从包的里面,通过对应的键,取到值
bundleTwo.getInt("此前设定的键名");
- 双向传递
带目的数据传递
A页面
Intent inten=newIntent(MainActivity.this,MyActivityTwo.class);
//此处使用了,传递 List 集合 inten.putParcelableArrayListExtra("stu", list);
//带目的的跳转, 参数一:intenttwo 不需要设置里面的参数了 参数二:请求码,int类型,推荐使用16进制 startActivityForResult(intent,0x100);
@Override //接受B页面反传递过来的值
//接受带目的跳转的方法,参数一 请求码 参数二:结果码 参数三:结果
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//判断一下,否者,当没有取到值时会出现,空值型异常
if(date!=null){
//参数为:你设置如的 键名 你要取的是什么类型,就调用对应的方法
String str=data.getStringExtra("键名");
}
}
B页面
//为什么不给intenttwo 设定要跳转的目的地呢?
//因为,结束掉本Activity以后,堆栈中的我下面的Activity就是我要传值过去的Activity,故此,无需设定目的!
Intent intenttwo=new Intent();
//给Intent 设定传递回去的值
intenttwo.putExtra("键名","传回的值");
//给下一个Activity设置一个结果,参数一:请求码,int类型,推荐使用16进制
setResult(0x200,intenttwo);
//结束自己(Activity),让接受值得Activity显示出来
finish();
通过Java中的IO包,传递对象
先建立一个实体类
public class Preson implements Serializable{ //把对象类,实现序列化接口
//里面的属性我就不写了
}
A页面
Intent intent=new Intent(this,Test_Fragment.class);
实例对象
Preson preson=new Preson();
//把对象放入意图中
intent.putExtra("对象",preson);
//传递
startActivity(intent);
B页面
//接受对象
preson = (Preson) getIntent().getSerializableExtra("对象 键名");
通过Android中的OS包,传递对象集合
- 让实体类实现android.os.Parcelable
package emtity_Preson;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
public class Preson implements Parcelable { //把对象类,实现序列化接口
private int sid;
private String name;
public Preson(int sid, String name) {
this.sid = sid;
this.name = name;
}
public Preson(){}
protected Preson(Parcel in) {
sid = in.readInt();
name = in.readString();
}
//读取序列化的对象
public static final Creator<Preson> CREATOR = new Preson.Creator<Preson>() {
@Override
public Preson createFromParcel(Parcel source) {
//读,从序列化中吧字段读取出来,按照写入的顺序,读取
int sid=source.readInt(); //读取被序列化的编号
String name=source.readString(); //读取被序列化的名字
return new Preson(sid,name); //从序列化中取到值,赋给对象,然后返回
}
@Override //返回集合的长度
public Preson[] newArray(int size) {
return new Preson[size];
}
};
@Override //描述内容信息
public int describeContents() {
return 0;
}
@Override//写入序列化
public void writeToParcel(Parcel dest, int flags) {
//将实体类的所有属性写入序列化
dest.writeInt(sid);
dest.writeString(name);
}
}
A页面
//参数一为,从哪个Activity开始跳的, 参数二为,目的Activity
Intent intent=new Intent(this,Test_Fragment.class);
//建立集合
ArrayList<Preson> Presonlist=new ArrayList<Preson>();
for (int i = 0; i <10 ; i++) {
Preson preso=new Preson(1,"小明"+i); //建立多个对象
Presonlist.add(preso); //放入集合
}
//把对象集合放入意图中 intent.putParcelableArrayListExtra("Presonarraylist",Presonlist);
//传递
startActivity(intent);
B页面
//接受对象(Android)序列化的集合
ArrayList<Preson> Presonlists = getIntent().getParcelableArrayListExtra("Presonarraylist"); //通过键名取到,序列化后的集合对象