Лучшая практика? Передать параметр между действиями - PullRequest
0 голосов
/ 29 августа 2018

Лучший способ передать параметр между активами - это использовать метод putExtra (). Передача объекта возможна методом putParcelable (). Но не все объекты подлежат продаже. Если вы хотите передать неприемлемый объект, как вы можете это сделать?

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

Пример:

MainActivity

class FirstActivity extends AppCompatActivity {

  MyOwnNotParcelableObject mObject;

  public void openNextActivity() {
    final Intent intent = new Intent(this, SecondActivity.class);
    SecondActivity.mObject = mObject;  //<--Fills the static variable
    startActivity(intent);
  }
}

SecondActivity

class SecondActivity extends AppCompatActivity {

  static MyOwnNotParcelableObject mObject;

}

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Если вы хотите передать неразлагаемый объект, как вы можете это сделать?

Использовать ViewModel: https://developer.android.com/topic/libraries/architecture/viewmodel

для совместного использования примитивных данных используйте разделяемое предпочтение, а для сложных данных / непереносимых данных используйте ViewModel.

Расширение класса ViewModel имеет много преимуществ:

  • вам не нужно беспокоиться о жизненном цикле держателя данных интерфейса пользователя. ViewModel будет автоматически создан на заводе, и вам не нужно самостоятельно создавать и уничтожать его
  • данные будут всегда обновляться - после телефона вы получите те же данные вращение, как это было раньше. Благодаря этому вам не нужно проходить вручную данные для нового действия или сделать второй вызов база данных. Это все для вас!
  • данные будут ждать вас. Если вы сделаете вызов API, вы будете поворачивать телефон, и результат будет доставлен до того, как действие будет воссоздано, вы уверены, что данные будут сохранены во ViewModel, и вы можете получить их сразу после восстановления активности
0 голосов
/ 02 ноября 2018

@ АНМОЛЬ ШРИВАСТАВА Извините, что противоречу вам, но в данный момент в действиях такого не может быть.

То, что вы говорите, верно во фрагменте, так как экземпляр viewmodel будет связан с контекстом. Если мы вставим ViewModel из экземпляра действия A, у меня не будет тех же данных в действии B, если я не использую фабрику, которая создает одну копию экземпляра. Пробелам также здесь ниже. Как мне справиться с выключенной моделью представления?

Это хороший вопрос. Итак, я предлагаю вам использовать модель представления только между действием и его фрагментами. Следовательно, 1 активность может иметь N фрагмент, связанный с N viewmodel экземпляра родительской активности. Чтобы передавать данные между действиями, передайте идентификатор, если объект сохранен в базе данных, и извлеките его из ViewModel. Хотя, если он не сохранен в базе данных, сохраните временный объект где-нибудь, но не в общем! Это замедляет UI

0 голосов
/ 29 августа 2018

Использование статических объектов не является предпочтительным. Вместо этого вы можете сохранить свои данные в общих настройках и получить их в другом упражнении.

...