99 votes

Android HashMap dans un Bundle ?

Le site android.os.Message utilise un Bundle à envoyer avec sa méthode sendMessage. Par conséquent, est-il possible de mettre un HashMap à l'intérieur d'un Bundle ?

178voto

ρяσѕρєя K Points 51253

Essayer comme :

Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);

et en deuxième activité

Bundle bundle = this.getIntent().getExtras();

if(bundle != null) {
   hashMap = bundle.getSerializable("HashMap");
}

parce que Hashmap par défaut implémente Serializable vous pouvez donc le passer en utilisant putSerializable dans Bundle et entrer dans une autre activité en utilisant getSerializable

13voto

CFlex Points 3137

Selon le doc , Hashmap met en œuvre Serializable pour que vous puissiez putSerializable Je suppose. Vous avez essayé ?

6voto

Martin Pfeffer Points 85

Remarque : si vous utilisez une AppCompatActivity, vous devrez appeler la fonction protected void onSaveInstanceState(Bundle outState) {} ( PAS public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {} ).

Exemple de code...

Enregistrez la carte :

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putSerializable("leftMaxima", leftMaxima);
    outState.putSerializable("rightMaxima", rightMaxima);
}

Et le recevoir dans onCreate :

if (savedInstanceState != null) {
    leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
    rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}

Désolé si c'est une sorte de réponse en double - peut-être que quelqu'un la trouvera utile :)

4voto

Kapil Vats Points 2201

Si vous voulez envoyer toutes les clés dans le paquet, vous pouvez essayer

for(String key: map.keySet()){
    bundle.putStringExtra(key, map.get(key));
}

1voto

Jasss Points 104
  public static Bundle mapToBundle(Map<String, Object> data) throws Exception {
    Bundle bundle = new Bundle();
    for (Map.Entry<String, Object> entry : data.entrySet()) {
        if (entry.getValue() instanceof String)
            bundle.putString(entry.getKey(), (String) entry.getValue());
        else if (entry.getValue() instanceof Double) {
            bundle.putDouble(entry.getKey(), ((Double) entry.getValue()));
        } else if (entry.getValue() instanceof Integer) {
            bundle.putInt(entry.getKey(), (Integer) entry.getValue());
        } else if (entry.getValue() instanceof Float) {
            bundle.putFloat(entry.getKey(), ((Float) entry.getValue()));
        }
    }
    return bundle;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X