Intent传值常用类型

本文详细介绍了Intent在Android中的使用,包括如何传递基本数据类型、数组、Parcelable对象、Serializable对象、泛型集合以及自定义对象。强调了Bundle在数据传递中的重要性,并提供了实例代码,特别提到了Bitmap的传递方式以及Activity间的回传数据操作。

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

前言

Intent可以用来启动Activity(startActivity(Intent))、Serveice(startService(Intent))等组件,可以用来绑定Activity和Service以建立它们之间的通信(bindServiceConnaction(Intent,ServiceConnection,int)),可以作为Broadcast Intent发送给广播接收器(sendBroadcast(Intent))。


介绍

主要讲解Intent如何传值和传递对象?

  • Intent可以传递什么类型数据?

    Intent传递基本数据和基本数据数组
    Intent传递Parcelable对象
    Intent传递Serializable对象
    Intent传递String,Integer,CharSequence泛型集合
    Intent传递基本自定义对象集合

  • Intent通过什么传递数据

    通过Bundle存储数据


使用

在界面跳转的时候,如果我们使用Inten传递数据,下面我们就以下这几方便做介绍:

(1)一个Activity数据传递到另一个Activity

主Activity:

 //通过setFlags(int flags)方法
 Intent intent=new Intent(MainActivity.this,SecondActivity.class);
 intent.setFlags(1000);
 startActivity(intent);

第二个 Activity:

//获得setFlag传递的整形数据 
int flags=getIntent().getFlags(); 
//转化为字符串 
String sFlags=String.valueOf(flags); 
textView.setText(sFlags);

PS:此方法只能传递整形的数据(一般不用于传递数据),常用方式: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//用于添加额外的控制旗标


(2)通过Intent.putExtra(String name, String value)方法

主Activity:

Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("name", "zhangsan");
intent.putExtra("age", "23"); 
startActivity(intent);

第二个Activity:

Intent intent=getIntent();
String name=intent.getStringExtra("name");
String age=intent.getStringExtra("age");
textView.setText("name:"+name+"\nage:"+age);

PS:此方法对于没有实现序列化接口的类型无法使用,如Integer、Double、Float、Short


(3)通过Bundle绑定数据方法(推荐使用)

主Activity:

Bundle bundle=new Bundle();
bundle.putString("name", "张三");
bundle.putInt("age", 26);
Intent intent=new Intent(MainActivity.this,ThridActivity.class);
//使用bundle传递数据
intent.putExtras(bundle);
startActivity(intent);

第二个Activity:

Bundle bundle=this.getIntent().getExtras();
String name=bundle.getString("name");
int age=bundle.getInt("age");
textView.setText("name:"+name+"\nage:"+age);

PS:此方法最常用。


(4)跳转Activity返回数据到主Activity

主Activity:

Bundle bundle=new Bundle(); 
bundle.putString(“userName”, “zhangsan”); 
bundle.putInt(“userAge”, 100); 
Intent intent=new Intent(MainActivity.this,ForthActivity.class); 
intent.putExtras(bundle); 
startActivityForResult(intent, 1024);//

第二个Activity:

Intent intent=new Intent(); 
intent.putExtra(“backData”, “这是返回主Activity的数据”); 
setResult(RESULT_OK, intent);//回传数据到主Activity 
finish(); //此方法后才能返回主Activity

主Activity接收回传数据,重写onActivityResult()方法:

protected void onActivityResult(int requestCode, int resultCode, 
Intent data) { 
    // TODO Auto-generated method stub 
        switch (requestCode){ 
        case 1024: 
            if(resultCode==RESULT_OK){ 
                Bundle bundle=data.getExtras(); 
                String str=bundle.getString(“backData”); 
                Toast.makeText(MainActivity.this, str, 1).show(); 
            } 
            break; 
        default: 
            break; 
}

(5)Activity传递对象

主Activity:

Person是一个java文件,必须实现Serializable接口才可以使用

person=new Person();
person.setName("zhangsan");
person.setSex("male");
person.setAge(80);
Bundle bundle=new Bundle();
bundle.putSerializable("person", person);//该方法传递对象
//或者putParcelable(key,object)方法
Intent intent=new Intent(MainActivity.this,FiveActivity.class);
intent.putExtras(bundle);
startActivity(intent);

第二个Activity:

Intent intent=getIntent(); 
Bundle bundle=intent.getExtras(); 
Person person=(Person) bundle.getSerializable(“person”);//获得传递的对象 
tv.setText(person.toString()); 
对象Person方法://要实现Serializable接口,定义变量及方法省略 
public class Person implements Serializable{ }

(6)Activity传递bitmap

第一个Activity:

Intent intent=new Intent();
intent.setClass(MainActivity.this, ShowActivity.class);
intent.putExtra("bitmap", bitmap);
startActivity(intent);

第二个Activity:

接受图片的时候需要用到Parcelable

Bitmap bitmap = getIntent().getParcelableExtra("bitmap");
mIv.setImageBitmap(bitmap);

总结

  1. startActivity():跳转到目标页面,若想跳回当前页面,必须再一次使用startActivity()。

  2. startActivityForResult():可一次性完成返回跳转,Activity可接收返回数据。

  3. 可以通过Bundle传递对象,但传递的对象要实现Serializable接口。

  4. 获取Bitmap的时候需要用到getParcelableExtra()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值