`
daniel_tu
  • 浏览: 184233 次
  • 性别: 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流程图

    onActivityResult demo

    它们允许我们在不同的Activity之间传递数据和状态,从而实现更复杂的交互逻辑。理解并熟练掌握这两个方法的使用,对于构建功能丰富的Android应用至关重要。通过实践和研究"onActivityResult demo",开发者可以深入...

    Android Acitivity的测试代码

    3. **MockK**:在某些情况下,你可能需要模拟Activity内部依赖的服务或数据源。MockK是一个Java和Kotlin的模拟库,可以帮助我们隔离测试。例如,你可以模拟一个网络服务接口,以便在测试中控制其行为: ```kotlin ...

    acitivity组件启动过程分析

    - **子 Activity**:由根 Activity 或其他子 Activity 启动,它们可能与启动者运行在相同的进程中,也可能运行在不同的进程中。 Activity 的启动方式有两种:**显示启动** 和 **隐式启动**。显示启动时,需要指定...

    Android acitivity &Intent;

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

    Acitivity2:伯恩斯活动

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

    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入门级介绍资料,对其生命周期介绍的很好

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

    JNI允许Java代码调用本地库,通常用于性能优化、利用硬件功能或者集成第三方库。 描述中提到的操作步骤是在2014年的环境中进行的,可能与最新的开发环境有所不同,但基本流程仍具有参考价值。以下是根据给定内容...

    Android代码-and-load-aot

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

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

    在Android应用开发中,了解当前运行的Activity或Fragment对于开发者来说是至关重要的,尤其是在调试阶段。标题和描述中提到的功能,实际上是一个辅助工具,它能在界面左上角实时展示当前应用所处的Activity、Dialog...

    activiti 官网6.0版本-谷歌翻译版

    - **灵活性高**:Activiti适用于多种业务流程管理场景,无论是简单的流程设计还是复杂的工作流管理。 综上所述,Activiti 6.0版本提供了丰富的功能与灵活性,支持多样的部署模式与数据库配置选项,满足不同开发需求...

    Android 9.0 10.0 framework添加KeyEvent按键事件流程.rar

    在Android系统中,KeyEvent是处理用户输入硬件按键事件的关键类,它封装了按键按下和释放的动作。本资料主要探讨在Android 9.0 (Pie) 和 Android 10.0 (Q) 操作系统版本中,在framework层添加KeyEvent事件的详细流程...

    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数据库操作等。

    activiti bpmn idea插件

    Activiti BPMN IDEA 插件是专为IntelliJ IDEA设计的一款强大工具,它极大地提升了开发者在使用Activiti工作流引擎开发BPMN(Business Process Model and Notation)流程图时的效率。这款插件集成了对BPMN 2.0规范的...

Global site tag (gtag.js) - Google Analytics