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