`
daniel_tu
  • 浏览: 178984 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用Parcelabel在Acitivity间传递复杂数据

 
阅读更多

一般在两个Acitivity之间传递数据使用简单的 Bundle 就可以做到, 但是只能传递一些基本类型的数据, 如果需要传递一个对象作为数据携带者, 就需要使用 Parcelable 接口, 实现该方法的类就可以传递到 Bundle 中去, 作为一个对象进行数据传递.

这里直接使用一个例子来说明如果实现 Parcelable 接口:

class Tweet implements Parcelable {

 public Tweet(Parcel in) {
          id = in.readString();
          text = in.readString();
  }

 // For interface Parcelable

  public int describeContents() {
      return 0;
  }

  public void writeToParcel(Parcel out, int flags) {
          out.writeString(id);
          out.writeString(text);
  }

  public static final Parcelable.Creator<Tweet> CREATOR
          = new Parcelable.Creator<Tweet>() {
      public Tweet createFromParcel(Parcel in) {
          return new Tweet(in);
      }

      public Tweet[] newArray(int size) {
//          return new Tweet[size];
          throw new UnsupportedOperationException();
      }
  };
注解:
  1. 首先实现 writeToParel() 抽象方法, 在其中将需要传递的数据写入到 Parcel out 中去, Parcel 有一整套的各种类型数据 writeread 方法. 一般性的是把该类的成员变量写入其中去, 当然你想附带传递点其他数据都是可以的(亲, 包邮哦), 这里没有限制, 唯一的限制是顺序, 这里写入的顺序决定了你读取时的顺序, 这可以考虑第3点即明.

  2. 实例化一个 Parcelable.Creator<E> ,在其中实现 createFromParcel() 方法, 该方法返回该类的一个实例, 则这个实例是通过读取 Parcel 中写入的数据来进行实例化对象的. 这里的例子是 return new Tweet(in) .

  3. 实现一个构造函数 其参数是 Parcel 类型, 这里例子里是 public Tweet(Parcel in) , 在其中利用 Parcel 里的数据来初始化对象, 而 Parcel 里有哪些数据,即数据的顺序都由我们第一步里面利用 write 方法写入操作来决定, 也就是说比如我在第一步里面先 writeString(id) , 然后再 writeString(text) , 那么我读的时候就必须按照这个顺序 , 先 readString() 出来的就是 id ,在read一个就是 text , 数据的类型和顺序都必须一一对应.

分享到:
评论

相关推荐

    am命令启动Acitivity流程图图片

    am命令启动Acitivity流程图

    Android Acitivity的测试代码

    Android Acitivity的测试代码

    实验08。2 使用Intent在Activity间传输数据.

    2、 模拟淘宝登录界面 其中登录、收货地址管理等暂时用图片代替。 1、掌握StartActivity()启动其他Activity的方式 2、掌握两个Acitivity之间通过Intent传递信息。

    Android acitivity &Intent;

    一个新 Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。 2. Paused 当 Activity失去...

    acitivity组件启动过程分析

    该文档主要记录了Activiyt组件启动过程分析,内容参考了Gityuan和老罗的博文。

    Acitivity2:伯恩斯活动

    这是一条指南,可帮助您开始在Visual Studio Code中编写Java代码。 资料夹结构 默认情况下,工作区包含两个文件夹,其中: src :用于维护源的文件夹 lib :用于维护依赖关系的文件夹 依赖管理 JAVA DEPENDENCIES...

    onActivityResult demo

    这个例子讲的是一个activity对应多个acitivity的传值方法

    Android开发丶使用DialogFragment实现炫酷的登录界面并完成DialogFragment与宿主Acitivity的通信

    记录归纳了项目里的主要技术点,不同于以往的Activity登录界面,本demo使用了DialogFragment来实现更炫酷好看的效果,并且实现了其与宿主Acitivity的通信,便于完成进一步的网络请求等操作。

    启动指定的Acitivity 返回之后到主界面

    在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,并设置点击动作,点击后跳转到app中对应的Activity...

    Android中利用Handler在子线程中更新界面--简单的小球上下跳动案例

    处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送...

    andriod activity说明

    andriod activity入门级介绍资料,对其生命周期介绍的很好

    Android代码-and-load-aot

    解决思路举一个例子:例如在打开A页面Activity时,在调用startActivity方法的时候,就去调用A页面的加载数据方法loadData(),此时开始加载网络数据,同时Acitivity开始初始化加载布局等,等Activity准备好UI需要数据...

    使用eclipse单步调试jni代码(方法1)

    本文档是自己一边实际操作一边记录完成,每一关键步骤都有截图与详细说明,本是自己的记录也是拿出来与大家...方法1的特点是配置简单,缺点是每次调试都要重新在目标机安装app,并重新调试。文档完成时间是2014年10月。

    Android单元测试-对Activity的测试

    2、需要在Activity启动前完成各种数据的部署,然后查看Activity的效果。 对于这两种需求,笔者分别做了两个示例解说: 1、检测一个布局中的button和TextView是否正确。 2、从网络动态获取String到Activity界面显示...

    Android开发Activity与Fragment通信交互全解

    在日常开发中Fragment被我们使用的越来越多占领着举足轻重的位置,也经常需要在不同的Fragment中传递数据或者Activity与Fragment中传递数据;通过本套课程,相信大家可以在这个问题上做到游刃有余。

    自制简单android弹球小游戏

    在自学android的过程中自行开发的简单小游戏。为2.2系统,自行试验中可以在真机上运行。因为是自学作品,程序中或许会... 此程序用到UI编程,intent,Acitivity间跳转,xml资源使用,canvas绘图,SQLite数据库操作等。

    自制android弹球小游戏

    在自学android的过程中自行开发的简单小游戏。为2.2系统,自行试验中可以在真机上运行。因为是自学作品,程序中或许会...此程序用到UI编程,intent,Acitivity间跳转,xml资源使用,canvas绘图,SQLite数据库操作等。

    Android 横竖屏切换

    Android 横竖屏切换 利用Android系统每次屏幕切换会重启Activity的特性,在OnCreat处自动加载不同显示状态下的layout。

    Andorid 服务的使用

    代码介绍服务的启动两种启动方式,并实现服务于Acitivity 之间的数据交互。

    可以告诉你当前处在哪个acitivity或者fragment中(后台服务运行,可以帮助你调试一个陌生的应用)。

    辅助功能,界面左上角显示你当前所在的应用的activity名称,dialog名称,fragment名称等等,可以实时的帮助你调试一个陌生的应用,而不用琐碎的去一个个查看类了。十分方便。

Global site tag (gtag.js) - Google Analytics