2015-01-07 4 views
0

У меня есть объект, который я передаю через 2-3 действия как Parseable/Serialisable с использованием Intents. То, что я хочу, например, когда объект выходит из Activity1 в Activity3Android пропускает объект между действиями по ссылке

Activity1->Activity2->Activity3 

и Activity3 выполняет некоторые изменения в объекте, то Activity3 заканчивается и деятельности2 заканчивается, и мы возвращаемся к Activity1, то я хочу Activity1, чтобы быть в курсе изменения, внесенные в Activity2 и Activity3.

Имейте в виду, что я не сторонник использования подхода Singleton, ни «onActivityResult», поскольку мне могут потребоваться изменения в нескольких объектах. Я попытался следовать за ним, используя подход с интерфейсом, который достигает Activity3, и когда происходят изменения, он также заставляет предыдущую Acitivy обновляться, но ее трудно поддерживать и следовать ей.

В iOS, когда вы передаете объект на следующий вид, это по ссылке, поэтому изменения сразу доступны.

Любые предложения?

+0

Общие настройки могут помочь вам здесь –

+0

@MaorHadad: SharedPreference не поддерживают сериализуемые объекты. – Carnal

+0

@Panos: Почему бы не использовать подход чтения/записи с классом контроллера? – Carnal

ответ

0

Поскольку это данные времени выполнения, не рекомендуется использовать sharedpreference. Создайте класс с именем RunTimeData.java. Объявите все обязательные переменные здесь как статические. Всякий раз, когда вам нужно сохранять данные, сохраните их для этих переменных. После использования данных в другом классе убедитесь, что вы измените переменные, установив их в null.

Пример.

public class RunTimeData{ 
public static Object name=null; 
} 

При назначении данных следует использовать следующее.

RuntimeData.name=(Object)name; 
String firstName=RunTimeData.name.getFirstName(); 

При использовании данных используйте следующее.

RunTimeData.name.setLastName("xxx"); 
RunTimeData.name=name; 

Освободите переменную, если вы уверены, что не собираетесь снова использовать значение.

RunTimeData.name=null; 

Таким образом, вы будете поддерживать один объект через действия.

0

Может быть, вы можете использовать один шаблон проектирования: шаблон Observer

С помощью этого шаблона вы можете уведомить деятельности 1, когда активность 2 и 3 изменить объект.

Некоторые сведения здесь:

Надеюсь, это решить вашу проблему!

хорошо провести день!

1

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

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

http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/

+0

Нет. Из того, что я вижу, передача объекта Parcelable не работает как переданная по ссылке. Он по-прежнему создает новый экземпляр объекта. – Panos

0

подход я использовал:

В моей 1-ой деятельности я называю второй помощью:

startActivityForResult(Activity2.class, MyConstants.WAITING_FOR_X_RESULT); 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    //check for updated photos 
    if (requestCode == MyConstants.WAITING_FOR_X_RESULT) { 
     if (resultCode == RESULT_OK) {    
      MyObject myObject = (MyObject) data.getSerializableExtra(MyConstants.MY_OBJECT_INTENT); //get result from next activity 
      this.myObject = myObject; 
      notifyDatasetChanged(); //helper method to reload data 
     } 
    } 
} 

и в моей второй деятельности, когда окончание я называю:

Intent intent = new Intent(); 
intent.putExtra(MyConstants.MY_OBJECT_INTENT, myObject); 
setResult(RESULT_OK, intent); 
finish(); 

Если данные необходимо обновить, также когда пользователь нажимает кнопку назад, не забудьте переопределить метод onBackPressed (не называйте супер-реализацию) и вызовите вышеуказанный код.

Смежные вопросы