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から配列を抽出してから、を再作成することです。IntentLinkedHashMap
詳細については、この質問に対する私の回答を参照してください。
この問題を指摘してくれた@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()
);