Android中Parcelable的作用实例解析
程序员文章站
2024-02-27 23:59:15
在android提供了一种类型:parcel。被用作封装数据的容器,封装后的数据可以通过intent或ipc传递。 除了基本类型以外,只有实现了parcelable接口的类...
在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 App中的多个LinearLayout嵌套布局实例解析
-
Android中Fragment 真正的完全解析(上)
-
Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析
-
Android Studio EditText点击图标清除文本内容的实例解析
-
实例讲解Android中的AIDL内部进程通信接口使用
-
详解Android应用开发中Intent的作用及使用方法
-
详解Android中的沉浸式状态栏效果实例
-
Android App中实现相册瀑布流展示的实例分享
-
Android Material设计中列表和卡片的创建方法解析
-
从源码解析Android中View的容器ViewGroup