我想将 LinkedHashMap 发送到另一个 Intent。但我不知道额外的什么方法是允许的。
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
我想将 LinkedHashMap 发送到另一个 Intent。但我不知道额外的什么方法是允许的。
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
您不能可靠地发送 aLinkedHashMap
作为Intent
额外的。当您putExtra()
使用 a 调用时LinkedHashMap
,Android 会看到该对象实现了该接口,因此它将名称/值Map
对序列化为Bundle
. Intent
当你想在另一边提取它时,你得到的是 a HashMap
,而不是 a LinkedHashMap
。不幸的是,HashMap
你得到的这个已经失去了你最初想要使用 a 的原因的顺序LinkedHashMap
。
唯一可靠的方法是将 转换LinkedHashMap
为有序数组,将数组放入 中Intent
,从接收端提取数组Intent
,然后重新创建LinkedHashMap
.
有关更多血腥细节,请参阅我对这个问题的回答。
最好的方法是将其转换为相同类型的 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
)
爪哇:
gson.fromJson(
it.getStringExtra(ARG_DATA),
new TypeToken<ArrayList<Mountain>>(){}.getType()
);