Лучший способ передать объекты из одного занятия в другое - PullRequest
1 голос
/ 21 октября 2011

Я читал о глобальной статической технике, в которой мы создаем класс со статическими полями, к которым можно получить доступ в любой деятельности. Есть ли другой способ передать большие наборы данных, такие как ArrayList<Drawables> или HashMaps? Я также читал о Serializable, но не знаю, как его использовать. Любой пример кода приветствуется ...

Ответы [ 4 ]

3 голосов
/ 21 октября 2011
Intent intent = new Intent(getBaseContext(), NextActivity.class);
intent.putExtra("arraylist", new ArrayList<String>());

Если ваш ArrayList содержит другой объект, который вы создали самостоятельно, например Friend.class, вы можете реализовать Friend.class с помощью Serializable, а затем:

Intent intent = new Intent(getBaseContext(), NextActivity.class);
intent.putExtra("friendlist", new ArrayList<Friend>());

И для получения его на NextActivity.class:

Bundle extras = getIntent().getExtras();
    if(extras != null){
        ArrayList<Friend> friends = extras.getSerializable("friendlist");
    }

Что ж, вместо того, чтобы передавать пустой ArrayList, вам нужно будет поместить значения в ArrayList и затем передать его, но вы поймете идею.

1 голос
/ 21 октября 2011

Пока вы остаетесь в одном приложении (говорите: в той же JVM), вам не нужно беспокоиться о намерениях, посылках, сериализации и т. Д. - все объекты находятся в одной куче и могут передаваться через синглтоны, контейнеры DI, такие как roboguice иливсе, что вы считаете нужным.

Если вы хотите отправить данные в другое приложение, лучшим способом будет передать их как сериализованный материал JSON / XML.

1 голос
/ 21 октября 2011

Вы должны упаковать свою информацию в объект Intent , который вы создаете, чтобы вызвать следующую Activity . Существует дополнительный объект Bundle .

Вы можете использовать либо интерфейс Serializable , либо специфичный для Android интерфейс Parcelable для передачи непримитивных объектов.

На сайте Android Developer есть удобный учебник по блокнотам с примером ввода информации в цель.

Из их урока:

super.onListItemClick(l, v, position, id);
Cursor c = mNotesCursor;
c.moveToPosition(position);
Intent i = new Intent(this, NoteEdit.class);
i.putExtra(NotesDbAdapter.KEY_ROWID, id);
i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString(
        c.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
i.putExtra(NotesDbAdapter.KEY_BODY, c.getString(
        c.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
startActivityForResult(i, ACTIVITY_EDIT);
0 голосов
/ 21 октября 2011

Передача Hashmap довольно проста, объекты All Collections реализуют интерфейс Serializable (sp?), Что означает, что они могут передаваться как дополнительные в Intent

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...