Работа с одинаковыми данными в трех действиях - PullRequest
1 голос
/ 28 января 2011

Я не очень разбираюсь в компонентах для Android, поэтому просто не могу найти, где мне нужно искать.

У меня есть три действия:

1-й получает информацию о некоторых группахиз объектов, пользователь выбирает некоторые из этих групп, и действие должно начинаться со следующего действия

2-е действие показывает все объекты из групп, которые пользователь выбрал в предыдущем действии, здесь пользователь может отменить выбор некоторых выбранных объектов, а затем действие начинает трехмерное действие

3d-активность позволяет пользователю что-то делать с выбранными объектами

Мое решение - создать какую-то одноэлементную модель, которая позволяет действиям получать и сохранять информацию об объектах,

, но я полагаюэтот андроид имеет некоторые специальные компоненты для предоставления данных между действиями

Помогите мне найти эти компоненты ^ пожалуйста

Ответы [ 5 ]

6 голосов
/ 28 января 2011

Это зависит от типа данных, которыми вы хотите поделиться:

Примитивные типы данных
Для совместного использования примитивных данных между операциями / службами в приложении используйте Intent.putExtras.().Для передачи примитивных данных, которые должны быть сохранены, используйте механизм хранения настроек.

Непостоянные объекты
Для совместного использования сложных непостоянных пользовательских объектов в течение короткого времени, следующие подходыРекомендуются:

Класс android.app.Application

Приложение android.app.Application является базовым классом для тех, кому необходимо поддерживать состояние глобального приложения.Доступ к нему можно получить через getApplication () из любого действия или службы.Он имеет несколько методов жизненного цикла и будет автоматически создан Android, если вы зарегистрируете его в AndroidManifest.xml.

Открытое статическое поле / метод

AnАльтернативный способ сделать данные доступными через деятельность / службы - это использование открытых статических полей и / или методов.Вы можете получить доступ к этим статическим полям из любого другого класса в вашем приложении.Для совместного использования объекта действие, которое создает ваш объект, устанавливает статическое поле для указания на этот объект, а любое другое действие, которое хочет использовать этот объект, просто получает доступ к этому статическому полю.

HashMap из WeakReferences дляОбъекты

Вы также можете использовать HashMap WeakReferences для объектов с длинными ключами.Когда действие хочет передать объект другому действию, оно просто помещает объект на карту и отправляет ключ (который является уникальным длинным, основанным на счетчике или отметке времени) получателю действия с помощью преднамеренных дополнений.Операция получателя извлекает объект с помощью этого ключа.

Класс Singleton

Существуют преимущества использования статического Singleton, например, вы можете ссылаться на них, не вызывая getApplication.() к классу, специфичному для приложения, или к тому, чтобы повесить интерфейс на все ваши подклассы Application, чтобы вместо этого различные модули могли ссылаться на этот интерфейс.

Но жизненный цикл статикине очень хорошо под вашим контролем;чтобы придерживаться модели жизненного цикла, класс приложения должен инициировать и разрушать эти статические объекты в методах onCreate () и onTerminate () класса приложения

Постоянные объекты
Даже если кажется, что приложение продолжает работать, система может решить остановить свой процесс и перезапустить его позже.Если у вас есть данные, которые необходимо сохранить от одного вызова действия к другому, вам необходимо представить эти данные как состояние, которое сохраняется действием, когда ему сообщают, что оно может исчезнуть.

Для совместного использования комплексапостоянные определяемые пользователем объекты, рекомендуются следующие подходы:

  • Настройки приложения
  • Файлы
  • contentProviders
  • БД SQLite

Если общие данные необходимо сохранить во всех точках, где процесс приложения может быть уничтожен, поместите эти данные в постоянное хранилище, например, «Настройки приложения», БД SQLite, «Файлы» или «ContentProviders».

1 голос
/ 28 января 2011

попробуйте, пожалуйста,

    Intent i = new Intent(this, YourTragetedActivity.class);

    i.putExtra("value1", "test1");
    i.putExtra("value2", "test2");

    startActivity(i);


   //// On Your TragetedActivity

   getIntent().getStringExtra("value1")
   getIntent().getStringExtra("value2")
1 голос
/ 28 января 2011

Да, это так: http://www.remwebdevelopment.com/dev/a33/Passing-Bundles-Around-Activities.html

Обычно вы можете отправить Bundle или просто использовать для этого putExtra.

1 голос
/ 28 января 2011

Нет проблем с использованием одноэлементного режима для обмена информацией между вашими действиями, особенно если вам необходимо, чтобы эти данные были согласованными во всем приложении.

В качестве альтернативы вы можете использовать намерение для передачи данных между действиями -putExtra().

1 голос
/ 28 января 2011

да, вы можете отправлять данные между действиями, используя Intents.Для этого используйте функцию putExtra().Если вы хотите передать свои собственные объекты, вам нужно реализовать класс Parcalable.

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