如何将Enum对象添加到Android Bundle?
我有一个字符串的通用映射(键,值),这个字段是我需要可以分配的Bean的一部分.所以,我可以使用Parcel#writeMap方法.API Doc说:
请改用writeBundle(Bundle).在当前dataPosition()中将Map展平到parcel中,如果需要,增加dataCapacity().Map键必须是String对象.Map值使用writeValue(Object)编写,并且必须遵循其中的规范.强烈建议使用writeBundle(Bundle)而不是此方法,因为Bundle类提供了一个类型安全的API,允许您在编组时避免神秘的类型错误.
因此,我可以迭代我的Map中的每个条目并将其放入Bundle中,但我仍然在寻找一种更聪明的方法.我缺少Android SDK中的任何方法吗?
目前我这样做:
final Bundle bundle = new Bundle();
final Iterator<Entry<String, String>> iter = links.entrySet().iterator();
while(iter.hasNext())
{
final Entry<String, String> entry =iter.next();
bundle.putString(entry.getKey(), entry.getValue());
}
parcel.writeBundle(bundle);
Run Code Online (Sandbox Code Playgroud) 我想知道确切的,
parcelable还是serialization技术将数据从一个活动发送到另一个活动?提前致谢.
public class GetSetClass implements Serializable {
private int dt = 10;
/** pass any object, drwabale */
public int getDt() {
return dt;
}
public void setDt(int dt) {
this.dt = dt;
}
}
Run Code Online (Sandbox Code Playgroud) 我想提高我的应用程序的性能.我想到的一件事是用parcelable替换所有可序列化的intent-bundle参数.
我找到了这个主题:使用Parcelable而不是序列化对象的好处
有人从一本书中指出,parcelable只是用于进程间通信吗?这可能不是最新的了,对吧?因为从技术上讲,它至少是可能的.
然后还有一个声明,即parcelable不可靠,因为实现因设备而异,这当然是一种杀戮特性,因为我希望它始终工作,所有设备和apis,从API 7开始.
我还阅读了一些关于使用Externalizable或实现自定义协议的建议......但我不明白,为什么Parcelable不可靠,为什么Android开发人员会对所有设备无法解决的问题进行嗡嗡声?或者评论不正确?
是否值得实施Parcelable?我坚持使用Serializable吗?或者是自定义序列化/ Externalizable正确的方法?
请不要告诉我"只是尝试",我没有时间,特别是检查Parcelable是否可靠(也没有足够的设备)...经验被问到...
谢谢.
PS也不要说我"Serializable对于大多数情况都是可以接受的"我知道,它确实可以接受但是我有时间并且想要将它与Parcelable(或其他东西)一起使用,如果这改善了用户体验.
我有一个自定义类'Game',我在活动代码的顶部初始化.然后我去另一个活动,通常我通过arraylists等但我想转移到我的自定义类.....
我的自定义类'游戏'是一堆字符串和arraylists与getter和setter mehtods.
我得到了
游戏不是可分割或可序列化的对象
我尝试将其添加到意图时出错.我能在这做什么?
//Init Instance of Game class
Game newGame = new Game();
Run Code Online (Sandbox Code Playgroud)
设置我的听众.它适用于
//Setup onclick listeners
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(this_Activity.this, next_Activity.class);
i.putExtra("players", myList);
i.putExtra("newGame", (Parcelable) newGame);
startActivityForResult(i, 0);
}
});
Run Code Online (Sandbox Code Playgroud)