Android - Как передать HashMap <String, String> между действиями? - PullRequest
35 голосов
/ 14 февраля 2011

Как передать detail HashMap другому действию?

HashMap<String,String> detail = new HashMap<String, String>();
detail.add("name","paresh");
detail.add("surname","mayani");
detail.add("phone","99999");
......
......

Ответы [ 5 ]

62 голосов
/ 14 февраля 2011

Это довольно просто, все Collections объекты реализуют Serializable (sp?) interface, что означает, что они могут быть переданы как дополнительные внутри Intent

. Используйте putExtra(String key, Serializable obj) для вставки HashMap, а с другой стороны Activity использовать getIntent().getSerializableExtra(String key). Вам нужно будет преобразовать возвращаемое значение как HashMap.

57 голосов
/ 22 июня 2012

Решение:

Активность отправителя:

HashMap<String, String> hashMap= adapter.getItem(position);
Intent intent = new Intent(SourceActivity.this, DestinationActivity.class);
intent.putExtra("hashMap", hashMap);
startActivity(intent);

Активность получателя:

Intent intent = getIntent();    
HashMap<String, String> hashMap = (HashMap<String, String>) intent.getSerializableExtra("hashMap");
3 голосов
/ 04 июля 2014

Я использовал это, чтобы передать мой HashMap

startActivity(new Intent(currentClass.this,toOpenClass.class).putExtra("hashMapKey", HashMapVariable));

и при получении активности написать

HashMap<String,String> hm = (HashMap<String,String>) getIntent().getExtras().get("hashMapKey");

Потому что я знаю, что мой хэш-файл содержит строку в качестве значения.

1 голос
/ 15 июля 2014

Здесь я показываю пример кода для вашей справки. Я только что попробовал этот код, он отлично работает для меня. Проверьте это:

MainActivity:

    final HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
    hashMap.put(1, "Hi");

    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              

            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtra("h", hashMap);
            startActivity(intent);

        }
    });

SecondActivity:

Toast.makeText(SecondActivity.this,"Hi " +  getIntent().getSerializableExtra("h").toString(),Toast.LENGTH_SHORT).show();
1 голос
/ 14 февраля 2011

Альтернативой является то, что если информация является чем-то, что можно считать «глобальным» для приложения, то затем использовать класс Приложение .Вы просто расширяете его, а затем определяете свой собственный класс в манифесте, используя тег .Используйте это экономно, хотя.Стремление злоупотреблять им велико.

...