Сериализация Android / Передача и возврат объектов - PullRequest
4 голосов
/ 06 октября 2011

Итак, у меня есть приложение, которое управляет рабочими заказами.В одной части приложения у меня есть список рабочих заказов, которые были получены из веб-службы.Затем пользователь выбирает одно из рабочих заказов из списка, и список начинает новое действие (передавая ему объект Workorder), в котором отображаются детали рабочего заказа.Пользователь может редактировать части заказа в течение этого времени.Если пользователь возвращается в список (с помощью кнопки «Назад»), мне нужно передать измененный рабочий заказ BACK в список рабочих заказов и либо обновить, либо заменить старый объект новым измененным.В противном случае (как это происходит в настоящее время) пользователь редактирует рабочий заказ, но если он вернется к списку и снова выберет тот же самый рабочий заказ, активация сведений о рабочем заказе отобразит все старые данные.Каков наилучший способ сделать это.В настоящее время у меня есть класс Workorder, реализующий Serializable, поэтому объекты Workorder могут быть переданы в последовательные действия.

Так что это работает: Список -> Workorder A

Но вот где у меня проблема: List <- Workorder A (модифицированный) </p>

Я не уверен, должен ли я использовать startActivtyForResult и передавать объект workorder обратно или нет.Я знаю, что это возможно, но я не уверен, есть ли более изящные способы сделать это.Спасибо за любую помощь, так как она очень ценится!

1 Ответ

10 голосов
/ 06 октября 2011

Если ваш Workorder объект уже Serializable, вы можете легко передать объект в пределах Bundle намерения. Чтобы сохранить объект в намерении, вы должны сделать:

intent.putExtra("SomeUniqueKey", [intance of workorder]);

и загрузить в другое действие:

Workorder workorder = (Workorder) intent.getSerializableExtra("SomeUniqueKey");

Если вы используете startActivityForResult, это будет выглядеть так:

WorkorderListActivity.java:

Intent intent = new Intent(this, WorkorderDetailsActivity.class);
intent.putExtra("SomeUniqueKey", _workorder);
startActivityForResult(intent, [UniqueNumber]);

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
     if (requestCode == [UniqueNumber])
     {
         if (resultCode == RESULT_OK)
         {
             Workorder workorder = (Workorder) intent.getSerializableExtra("SomeUniqueKey");
             // Do whatever with the updated object
         }
     }
 }

WorkorderDetailsActivity.java:

public void onCreate(Bundle savedInstanceState)
{
     Bundle bundle = getIntent().getExtras();
     _workorder = (Workorder) bundle.getSerializable("SomeUniqueKey");
     // Display the object
}

public void onBackPressed()
{
    // Update _workorder object
    Intent intent = getIntent();
    intent.putExtra("SomeUniqueKey", _workorder);
    setResult(RESULT_OK, intent);
}

Я считаю, что это должно работать.

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