`
hm4123660
  • 浏览: 282399 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Dea4ce76-f328-3ab2-b24a-fb268e1eeb75
数据结构
浏览量:69988
社区版块
存档分类
最新评论

Bundle自定义数据传递

阅读更多

      我们都知道Bundle可能过put****()方法添加各种基本类型的数据,Intent也可以通过putExtras(Bundle)将数据添加进去,然后通过startActivity()跳到下一下Activity的时候就把数据也传到下一个Activity了。如传递一个字符串到下一个Activity

 

把数据放到Intent里

 btn2.setOnClickListener(new View.OnClickListener() {
                    @Override
           public void onClick(View v) {

                Intent intent1=new Intent(MyActivity.this,SecondActivity.class);
                Bundle bundle=new Bundle();
                bundle.putString("title","Activity 2");//把Activity 2传给下一个Activity
                intent1.putExtras(bundle);
                startActivity(intent1);
            }
 });

 

接收端Activity代码为:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);
        //获取bundle数据
        Bundle bundle=getIntent().getExtras();
        String text=bundle.getString("title");//根据key来获取
        TextView title=(TextView)findViewById(R.id.title);
        title.setText(text+"   "+person.getName()+"  "+person.getAge());
    }

 

上面传递的是基本数据类型的数据,现在主要来说明自定义数据类型的传递。

 

1。序列化(详情参看java的序列化

 

定义Person类实现Serializable接口,Serializable接口没有定义任何方法,是一个标记接口

package com.example.AndroidStudy;

import java.io.Serializable;

public class Person  implements Serializable{

    private String name;

    private int age;//可用transient修饰不序列化某属性

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    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;
    }
}

 

使用 Bundle.putSerializable()方法把自定义Person数据放入Bundle内

 Intent intent1=new Intent(MyActivity.this,SecondActivity.class);
 Bundle bundle=new Bundle();
 bundle.putString("title","Activity 2");
 bundle.putSerializable("person",new Person("小白",20));
 intent1.putExtras(bundle);
 startActivity(intent1);

 

使用Bundle.getSerializable()来获取自定义类型数据

 //获取bundle数据
 Bundle bundle=getIntent().getExtras();
 String text=bundle.getString("title");//根据key来获取
 Person person=(Person)bundle.getSerializable("person");

 

2.实现Parcelable接口

     Parcelable是Android特有的功能,效率要比实现Serializable接口高。但实现Parcelable稍微复杂一些,推荐使用这种方法。

 

1.自定义Person类实现 Parcelable接口

package com.example.AndroidStudy;

import android.os.Parcel;
import android.os.Parcelable;

public class Person  implements Parcelable{

    private String name;

    private   int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    //重写下面两个方法
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        //把数据写入Parcel
        dest.writeString(name);
        dest.writeInt(age);
    }

    //还必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法

    public static final  Creator<Person>CREATOR=new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel source) {
            //读取时返回Person对象---根据Parcel写入的数据生成Person返回
            return new Person(source.readString(), source.readInt());
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
}

 

 使用 Bundle.putParcelable()方法把自定义Person数据放入Bundle内

Intent intent1=new Intent(MyActivity.this,SecondActivity.class);
Bundle bundle=new Bundle();
bundle.putString("title","Activity 2");
bundle.putParcelable("person",new Person("小白",20));
intent1.putExtras(bundle);
startActivity(intent1);

 

使用Bundle.getParcelable()来获取自定义类型数据

 //获取bundle数据
 Bundle bundle=getIntent().getExtras();
 String text=bundle.getString("title");//根据key来获取
 Person person=(Person)bundle.getParcelable("person");

 

 

 

3
0
分享到:
评论

相关推荐

    Bundle传递数据方式

    本篇文章将详细讲解Bundle的两种主要数据传递方式:传递简单数据和传递自定义数据。 一、传递简单数据 1. 基本类型数据传递:Bundle支持基本类型的赋值操作,如int、String、boolean等。例如,我们可以这样传递一...

    AIDL、Messenger 两种方式实现跨进程通信,传递自定义数据

    本篇文章将深入探讨如何利用AIDL(Android Interface Definition Language)和Messenger服务这两种方式来实现跨进程通信,并传递自定义数据。 首先,我们来了解一下AIDL。AIDL是Android为开发者提供的一个工具,...

    Android用Bundle传递数据并返回结果

    2. **创建Bundle并添加数据**:创建一个`Bundle`对象,将需要传递的数据放入`Bundle`,然后将`Bundle`附加到Intent上。 ```java Bundle bundle = new Bundle(); bundle.putString("key", "your_data"); intent....

    android bundle和activity之间交换数据

    Bundle对象是Android系统用于存储和传递数据的一种容器,而Activity则是应用程序的基本组件,负责显示用户界面并处理用户交互。理解如何有效地在两者之间传递数据是提升Android开发技能的关键。 ### 1. Bundle对象...

    安卓Android源码——Bundle.rar

    9. **序列化与反序列化**:了解Bundle的数据序列化过程可以帮助我们更好地理解和解决因数据传递引发的问题,如数据丢失、类型转换异常等。 10. **自定义Parcelable**:学习如何创建自定义的Parcelable类,能够帮助...

    android bundle message

    通过这个“bundle_message”的源码,我们可以深入理解如何有效地使用Bundle进行数据传递,以及在实际开发中可能遇到的问题和解决策略。源码可能涵盖了异常处理、空值检查、数据验证等多个方面,这些都是Android开发...

    Android中Bundle的小例子

    在这个小例子中,我们将深入探讨如何在Android的Activity之间使用`Bundle`进行数据传递。 首先,让我们了解`Bundle`的基本使用方法。创建一个`Bundle`对象,然后通过`putXXX`方法添加数据。`XXX`代表数据类型,例如...

    testBundle

    在Android开发中,Bundle是一个非常重要的工具类,用于在组件之间传递数据。它是一个键值对的集合,通常被用来在Activity、Fragment或者Intent之间共享数据。本文将深入解析`Bundle`类及其在Android基础知识中的应用...

    Android例子源码Activity间的数据传递

    在Android应用开发中,Activity是用户界面的基本单元,它们之间的数据传递是常见的需求。这个"Android例子源码Activity间的数据传递"着重展示了如何在不同的Activity之间有效地传递数据。以下是关于这个主题的详细...

    android activity bundle 通信示例

    这是因为Intent本身只能携带有限的数据,而通过Bundle附加到Intent上,就可以传递更复杂的数据结构,如字符串、整数、浮点数、布尔值、数组甚至自定义对象(需实现Serializable或Parcelable接口)。 以下是使用...

    android Activity之间的数据传递

    在这种模式下,数据传递通常通过Intent的extras进行,比如使用`putExtra()`方法添加键值对,然后在目标Activity中用`getIntent().getExtras()`获取。 2. **单实例模式(SingleInstance)**:在整个任务栈中只有一个...

    Activity传递数据到另一个Activity并显示

    在数据传递中,`Intent`主要用来创建一个从一个`Activity`到另一个`Activity`的通道。 ```java // 创建一个新的Intent Intent intent = new Intent(currentActivity, TargetActivity.class); ``` ### 2. 通过`...

    Intent_Bundle_传参数

    而当需要传递大量复杂的数据时,Intent自带的Extra字段可能不足以满足需求,这时我们可以利用Bundle对象来扩展Intent的携带能力。本文将深入探讨Intent中的Bundle参数传递机制。 Bundle,全称为“软件包”,在...

    TestBundle

    在Android应用开发中,Intent和Bundle是两种非常重要的数据传递工具。它们都在应用程序组件之间起着桥梁的作用,但各自有着不同的特性和应用场景。本篇文章将深入探讨“测试Android中Intent传值与Bundle传值的不同”...

    Android-Robin是Activities和fragments之间传递Bundle数据的日志记录库

    在Android应用开发中,有效地管理和跟踪数据传递是至关重要的,特别是在Activities和Fragments之间的交互过程中。`Android-Robin`库就是为了满足这一需求而设计的,它是一个专门用于记录和调试Activities与Fragments...

    AIDL传递自定义对象

    当我们需要在不同的应用程序组件之间传递复杂的数据类型,比如自定义对象时,AIDL就显得尤为重要。本篇文章将深入探讨如何使用AIDL来传递自定义对象。 首先,我们需要了解AIDL的基本结构。AIDL文件本质上是一个接口...

    Activity页面数据传递

    Activity页面数据传递是一个关键概念,尤其对于新手开发者来说,理解和掌握这一技能至关重要。在Android应用中,我们经常需要在不同的Activity之间传递数据,这可能是为了启动新Activity时设置参数,或者在用户完成...

    安卓activity间的数据传递

    本篇文章将深入探讨“安卓activity间的数据传递”这一主题,特别关注使用Bundle对象的方法。 首先,Activity间的通信是Android应用设计的重要部分,这涉及到启动一个新Activity、在Intent中携带数据以及使用Bundle...

    Android应用源码之Bundle_Bundle.zip

    - 数据传递:`Bundle`是Android中传递数据的主要手段之一,特别是在Activity之间的跳转和Fragment的实例化过程中。 - 保存状态:当Activity由于配置更改(如屏幕旋转)而被销毁并重建时,`Bundle`可以用来保存和...

    Bundle--Android-Activity.rar_android_android activity

    7. Bundle与Fragment通信:除了在Activity之间,Bundle也可以用于Fragment之间的数据传递。在Fragment的`setArguments(Bundle args)`和`getArguments()`方法中,可以实现相同的数据交换逻辑。 8. Bundle的替代方案...

Global site tag (gtag.js) - Google Analytics