Могу ли я обновить элементы данных в одном действии из другого действия в приложении?

1

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

В MainActivity у меня есть:

static PilotRecord pilotRecord = new PilotRecord(); //PilotRecord just contains data item declarations

В MainActivity.onCreate:

pilotRecord.fuel = 100;

В MainActivity.onClick:

Intent intent = new Intent(this, SubActivity.class);
startActivityForResult(intent, 0);

В SubActivity.onCreate у меня есть:

MainActivity.pilotRecord.fuel = 200;

В SubActivity.onClick:

MainActivity.pilotRecord.fuel = 300;
setResult(RESULT_OK);
finish();

Когда я запускаю MainActivity, значение топлива составляет 100

Если я нажму в MainActivity, появится SubActivity, как ожидалось

Если я нажму в SubActivity, отобразится MainActivity и значение топлива теперь 300

Если я нажму кнопку "Назад", отобразится "MainActivity" и значение топлива теперь будет 200

Кто-нибудь знает о каких-либо потенциальных проблемах с этим, поскольку мне кажется мне проще, чем настройке намерений и т.д.

  • Frink
Теги:

2 ответа

3
Лучший ответ

Я понимаю, что то, что вы делаете, приведет к потере данных.

SubActivity не должен манипулировать данными вызываемой операции. Я не думаю, что есть гарантия того, что ваш MainActivity даже существует...

Система может решить убить ее в любое время и перезапустить ее, когда SubActivity сообщит, что она готова вернуться к MainActivity.

Вы должны передать данные в комплекте и позволить MainActivity изменять свои данные на основе результатов.

    Bundle stats = new Bundle();
    stats.putString("fuel","300"); 
    setResult(RESULT_OK, "PilotRecord", stats);
    finish();

Кроме того, помните, что вы должны сохранять уровень "Fuel" в каком-то постоянном хранилище, когда onPause() вызывается в вашей MainActivity.

Я бы посоветовал внимательно прочитать документацию для Activity, так как очень важно реализовать правильные обратные вызовы.

  • 0
    Я думал, что может быть подвох, так как все отсылают меня к намерениям. Спасибо за ваше объяснение. Предположительно, я все еще могу ссылаться на константы, такие как MainActivity.MAX_FUEL в моем SubActivity, так как они разрешаются во время компиляции? Если я сохраняю топливо в постоянном хранилище во время паузы, нужно ли его восстанавливать в резюме или оно уже будет там? Нужно ли мне восстанавливать его только при создании (которое будет выполняться только в том случае, если действие будет уничтожено системой)
  • 0
    Постоянные пользовательские данные должны быть сохранены в onPause () и восстановлены в onResume () и onCreate (). Он передаст вам пакет, но вы несете ответственность за заполнение ваших переменных данными в пакете. Данные о состоянии приложения, такие как данные, которые они вводят в текстовое поле, должны быть сохранены в onSaveInstanceState () и восстановлены в onRestoreInstanceState (). В противном случае, когда они повернут экран или получат телефонный звонок, временные данные будут потеряны, когда ваше приложение будет отправлено в фоновый режим.
1

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

  • 0
    У меня есть класс PilotRecord, который содержит все переменные, но он создается в MainActivity. Я думаю, что я мог бы передать весь класс в намерениях и от каждого SubActivity, поэтому я могу использовать общий код, так как он одинаков для каждого класса

Ещё вопросы

Сообщество Overcoder
Наверх
Меню