5

我想将 LinkedHashMap 发送到另一个 Intent。但我不知道额外的什么方法是允许的。

Bundle extras = getIntent().getExtras();
  LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
4

3 回答 3

6

您不能可靠地发送 aLinkedHashMap作为Intent额外的。当您putExtra()使用 a 调用时LinkedHashMap,Android 会看到该对象实现了该接口,因此它将名称/值Map对序列化为Bundle. Intent当你想在另一边提取它时,你得到的是 a HashMap,而不是 a LinkedHashMap。不幸的是,HashMap你得到的这个已经失去了你最初想要使用 a 的原因的顺序LinkedHashMap

唯一可靠的方法是将 转换LinkedHashMap为有序数组,将数组放入 中Intent,从接收端提取数组Intent,然后重新创建LinkedHashMap.

有关更多血腥细节,请参阅我对这个问题的回答。

于 2016-08-15T18:24:09.100 回答
0

最好的方法是将其转换为相同类型的 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);
于 2020-08-25T07:59:04.163 回答
0

感谢@David Wasser 指出这个问题。

我有另一种方法是使用Gson解析你的任何东西mapjson 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()
);
于 2021-11-03T10:25:02.167 回答