我想把LinkedHashMap发送到另一个Intent中。但我不知道哪种extras方法是可行的。
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
我想把LinkedHashMap发送到另一个Intent中。但我不知道哪种extras方法是可行的。
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
LinkedHashMap
作为Intent
extra发送。当您使用LinkedHashMap
调用putExtra()
时,Android会看到该对象实现了Map
接口,因此它将名称/值对序列化到Intent
中的extras Bundle
中。当您想要在另一端提取它时,得到的是一个HashMap
,而不是LinkedHashMap
。不幸的是,您得到的这个HashMap
已经失去了最初想要使用LinkedHashMap
的原因,即排序功能。LinkedHashMap
转换为有序数组,将数组放入Intent
中,在接收端从Intent
中提取数组,然后重新创建LinkedHashMap
。感谢@David Wasser指出这个问题。
我有另一种方法,就是使用Gson
来解析你的任何map
为json字符串
,然后放入intent
。少点戏剧!
发送的代码:
gson.toJson(data)
代码返回:
Kotlin:
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()
);
最好的方法是将其转换为相同类型的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);