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);
LinkedHashMap
をIntent
追加で確実に送信することはできません。を使用して呼び出すputExtra()
とLinkedHashMap
、Android はオブジェクトがMap
インターフェイスを実装していることを確認するため、名前と値のペアを のエクストラBundle
にシリアル化しIntent
ます。反対側でそれを抽出したい場合、得られるのはHashMap
ではなくLinkedHashMap
です。残念ながら、これは最初HashMap
に a を使用したかった理由である順序付けが失われていますLinkedHashMap
。
これを行う唯一の確実な方法は、LinkedHashMap
を順序付き配列に変換し、その配列を に入れ、受信側でIntent
から配列を抽出してから、を再作成することです。Intent
LinkedHashMap
詳細については、この質問に対する私の回答を参照してください。
この問題を指摘してくれた@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()
);