Activity 之间的数据传递

本文详细介绍了Android中Activity之间如何进行数据传递,包括基本类型、String、Bundle、对象及对象集合等多种方式,并提供了代码示例,包括单项传递、双向传递以及通过IO和OS包传递复杂数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity 之间传递数据

基本类型:

  1. 整:byte short int long
  2. 浮点:float double
  3. 布尔:boolean
  4. 字符:char

引用类型:
1. String
2. 传递数据包Bundle (集装箱)
3. 传递对象(对象集合)
4. 返回数据


代码示例

  1. 单项传递

    普通数据传递

    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("此前设定的键名");


  1. 双向传递
    带目的数据传递

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"); //通过键名取到,序列化后的集合对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值