【发布时间】:2010-11-12 11:16:36
【问题描述】:
我想将 LinkedHashMap 发送到另一个 Intent。但我不知道允许使用哪种额外方法。
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
【问题讨论】:
标签: android android-intent linkedhashmap
我想将 LinkedHashMap 发送到另一个 Intent。但我不知道允许使用哪种额外方法。
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
【问题讨论】:
标签: android android-intent linkedhashmap
您无法可靠地将LinkedHashMap 作为Intent 额外发送。当您使用LinkedHashMap 调用putExtra() 时,Android 会看到该对象实现了Map 接口,因此它将名称/值对序列化为Bundle 中的额外Intent。当你想在另一边提取它时,你得到的是HashMap,而不是LinkedHashMap。不幸的是,你得到的这个HashMap 已经失去了排序,这就是你最初想使用LinkedHashMap 的原因。
唯一可靠的方法是将LinkedHashMap转换为有序数组,将数组放入Intent,在接收端从Intent中提取数组,然后重新创建@987654336 @。
查看my answer to this question了解更多血腥细节。
【讨论】:
最好的办法是把它转成同类型的ArrayList
例子:
LinkedHashSet<Long> uniqueIds = new LinkedHashSet();
ArrayList<Long> ids = new ArrayList(uniqueIds);
Intent intent = new Intent(getContext(), UserStoryActivity.class);
intent.putParcelableArrayListExtra(FLAG_USERS_STORY_LIST_IDS, (ArrayList) ids);
startActivity(intent);
【讨论】:
感谢@David Wasser 指出这个问题。
我有另一种方法是使用Gson 将您的任何map 解析为json string,然后放入intent。少一点戏剧性!
代码发送:
gson.toJson(data)
代码返回:
科特林:
gson.fromJson<LinkedHashMap<Int, Int>>(
it.getStringExtra(ARG_DATA),
object : TypeToken<LinkedHashMap<Int, Int>>() {}.type
)
Java:
gson.fromJson(
it.getStringExtra(ARG_DATA),
new TypeToken<ArrayList<Mountain>>(){}.getType()
);
【讨论】: