5

LinkedHashMap を別の Intent に送信したい。しかし、エクストラのどのような方法が許容されるかはわかりません。

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

3 に答える 3

6

LinkedHashMapIntent追加で確実に送信することはできません。を使用して呼び出すputExtra()LinkedHashMap、Android はオブジェクトがMapインターフェイスを実装していることを確認するため、名前と値のペアを のエクストラBundleにシリアル化しIntentます。反対側でそれを抽出したい場合、得られるのはHashMapではなくLinkedHashMapです。残念ながら、これは最初HashMapに a を使用したかった理由である順序付けが失われていますLinkedHashMap

これを行う唯一の確実な方法は、LinkedHashMapを順序付き配列に変換し、その配列を に入れ、受信側でIntentから配列を抽出してから、を再作成することです。IntentLinkedHashMap

詳細については、この質問に対する私の回答を参照してください。

于 2016-08-15T18:24:09.100 に答える
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 に答える