Android中Parcelable的作用实例解析

作者:shichen2014 时间:2022-08-07 09:19:32 

在android提供了一种类型:Parcel。被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。
 
Parcelable实现要点:需要实现三个东西

1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:
writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc

2)describeContents方法。没搞懂有什么用,反正直接返回0也可以

3)静态的Parcelable.Creator接口。本接口有两个方法:

createFromParcel(Parcel in) 实现从in中创建出类的实例的功能

newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。

测试用的接收信息Activity:


import android.app.Activity;  

import android.content.Intent;  

import android.os.Bundle;  
import android.os.Parcelable;  

public class Test extends Activity {  

@Override
 public void onCreate(Bundle savedInstanceState) {  
   super.onCreate(savedInstanceState);  
   setContentView(R.layout.main);  
   Intent i = getIntent();  
   Person p = i.getParcelableExtra("yes");  
   System.out.println("---->"+p.name);  
   System.out.println("---->"+p.map.size());  
 }  
}

发送的Activity:


import java.util.HashMap;  

import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  

public class TestNew extends Activity {  

@Override
 public void onCreate(Bundle savedInstanceState) {  
   super.onCreate(savedInstanceState);  
   setContentView(R.layout.main);  
   Intent intent = new Intent();  
   Person p = new Person();  
   p.map = new HashMap<String,String>();  
   p.map.put("yes", "ido");  
   p.name="ok";  
   intent.putExtra("yes", p);  
   intent.setClass(this, Test.class);  
   startActivity(intent);  
 }  
}

Parcelable的实现类:


import java.util.HashMap;  
import android.os.Parcel;  
import android.os.Parcelable;  

public class Person implements Parcelable {  

public HashMap<String,String> map = new HashMap<String,String> ();  

public String name ;  
 @Override
 public int describeContents() {  
   return 0;  
 }  
 @Override
 public void writeToParcel(Parcel dest, int flags) {  

dest.writeMap(map);  
   dest.writeString(name);  
 }  
 public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {  
//重写Creator

@Override
   public Person createFromParcel(Parcel source) {  
     Person p = new Person();  
     p.map=source.readHashMap(HashMap.class.getClassLoader());  
     p.name=source.readString();  
     return p;  
   }  
   @Override
   public Person[] newArray(int size) {  
     // TODO Auto-generated method stub  
     return null;  
   }  
 };  

}
标签:Android
0
投稿

猜你喜欢

  • 如何在Spring中自定义scope的方法示例

    2022-12-23 02:17:41
  • Android 高仿微信朋友圈动态支持双击手势放大并滑动查看图片效果

    2021-08-21 21:16:40
  • Java 中的 String对象为什么是不可变的

    2023-08-04 03:24:32
  • Android中隐藏状态栏和标题栏的方法汇总(隐藏状态栏、标题栏的五种方法)

    2022-05-18 07:31:03
  • Java上传视频实例代码

    2023-06-24 04:17:45
  • java图形用户界面实现菜单功能

    2023-11-23 11:50:58
  • C语言代码实现三子棋小游戏

    2023-04-16 02:12:41
  • C#实现带阴历显示的日期代码

    2023-12-11 02:19:04
  • 完美解决Spring声明式事务不回滚的问题

    2023-07-12 14:38:50
  • Android RecyclerView的刷新分页的实现

    2022-10-31 15:40:34
  • Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案

    2022-11-21 07:34:41
  • IDEA:Git stash 暂存分支修改的实现代码

    2023-11-29 09:16:35
  • c# 用Dictionary实现日志数据批量插入

    2022-05-29 02:01:45
  • 详解android 中animation-list 动画的应用

    2022-09-13 18:28:31
  • ADO.NET实用技巧两则

    2021-12-26 12:48:32
  • Mybatis-plus配置分页插件返回统一结果集

    2022-05-27 19:15:06
  • 浅谈java中静态方法的重写问题详解

    2022-12-24 10:13:04
  • 解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法

    2022-03-19 03:55:09
  • JavaWeb中导出excel文件的简单方法

    2023-11-13 02:41:43
  • java使用websocket,并且获取HttpSession 源码分析(推荐)

    2023-08-04 17:38:05
  • asp之家 软件编程 m.aspxhome.com