2015-08-21 2 views
0

Я пытаюсь передать HashMap объект в другой деятельности, используя поглотитель tableRow.getRowData(), как показано в коде ниже:HashMap прошел в операцию

tableRow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent newIntent = new Intent(getApplicationContext(), ToDoDetailActivity.class); 
       putExtras(newIntent, tableRow.getRowData());//<--- 
       startActivity(newIntent); 
      } 
     }); 

На самом деле tableRow объект принадлежит к пользовательскому классу, который наследует от TableRow, который внутри HashMap<String, String> rowData, который представляет всю строку (ключ: «столбец БД», значение: «значение поля БД»). Как я уже сказал, rowData возвращается getRowData().

Это хороший способ передать объект в пределах putExtras()?

Кроме того, видя this Android tutorial, я не могу понять, как бороться с rowData с другой деятельностью.

EDIT: Мой вопрос немного отличается от this, потому что это невозможно передать, даже если класс HashMap сериализации по умолчанию, объект хэш-карте через putExtra() (я судимое сделать это ранее видел этот вопрос) ,

+0

Я думаю, что нет никакой проблемы, передавая данные таким образом. Но есть много других способов. – RajSharma

+4

Возможный дубликат [Android - Как передать HashMap между действиями?] (Http://stackoverflow.com/questions/4992097/android-how-to-pass-hashmapstring-string-between-activities) –

ответ

0

Я понял, что, как вид Kingfisher Фука сказали, Ther нет никакого способа, чтобы пройти HashMap через деятельность, если вызывающий putExtra() для каждого элемента HashMap. Я думаю, что это самое простое решение.

0

Да, это стандартный способ, но вы можете передавать только объекты Serializable в качестве дополнительных функций. HashMap и String реализовать Serializable, поэтому он должен работать.

Это migth полезно взглянуть на этот TableRow наследующий класс, но я попытаюсь угадать код, чтобы отправить:

Intent newIntent = new Intent(getApplicationContext(), ToDoDetailActivity.class); 
intent.putExtra("tableRow", tableRow.getRowData());//<--- 
startActivity(newIntent); 

И получить данные TableRow внутри получающее Activity:

protected void onCreate(Bundle bundle) { 
    super.onCreate(savedInstanceState); 

    Intent intent = getIntent(); 
    TableRow tableRow = (TableRow)intent.getSerializableExtra("tableRow"); 
} 
1

AFAIK, нет возможности пройти HashMap через Activity. Если вам действительно нужно передать все данные HashMap, я рекомендую использовать Application для хранения HashMap, после чего вы можете получить доступ к своим HashMap данным из любой точки приложения.

+0

Это, наверное, одно из решений, но я не думаю, что это хорошая идея, что это глобальная переменная. Я попробую еще один способ вызвать много 'putExtra (« ключ »,« значение »)' много времени как количество записей HashMap. – grimi

+0

@ AndreaGrimandi да, это нехорошее решение (но неплохо, конечно). Однако вы должны рассмотреть это, если вам нужно передать много данных другому виду деятельности. Если ваши данные будут большими при передаче, это заставит ваше приложение остановить работу. –

1

Вам не нужно использовать getRowData. Все, что вы должны сделать, это:

HashMap<Object, Object> extraData = new HashMap<>(); 
putExtras("myHashMap", extraData); 

и в вашей второй деятельности:

(HashMap<Object, Object>) intent.getSerializableExtra(YourFirstActivity.EXTRA_DATA); 
Смежные вопросы