2013-08-11 2 views
2

У меня есть абстрактная деятельность под названием AbstractEntryActivity. Два мероприятия ModifyEntryActivity и AddEntryActivity продлить его.Почему информация getApplication сбрасывается после выбора изображения?

У меня также есть глобальный Application, который я звоню с getApplication, и где я помещаю информацию, которая должна быть глобальной. A список, в моем случае.

В моей абстрактной деятельности, я называю намерение принять или забрать картину так:

public void onPickPicture(View view) { 

    Intent pickIntent = new Intent(); 
    pickIntent.setType("image/*"); 
    pickIntent.setAction(Intent.ACTION_GET_CONTENT); 

    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    Intent chooserIntent = Intent.createChooser(pickIntent, 
      getString(R.string.dialog_pick_picture_title)); 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
      new Intent[] { takePhotoIntent }); 

    startActivityForResult(chooserIntent, Constants.SELECT_PICTURE); 
} 

У меня также есть метод onActivityResult который занимается с изображением. Но перед вызовом вызывается метод onCreate. (Иногда onActivityResult называется и не OnCreate)

На первом onCreate зову Аннотация деятельности, проверить содержание списка моего приложения: это нормально (не пустое, ни пустой). Теперь, когда я возвращаюсь из галереи, я вызываю getApplication, и List, который я вставляю в него, равен null.

Вот мой onCreate из Реферативного деятельности:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_entry); 
    // Get all views ... 
    ... 
    mApp = (MyApplication) getApplication(); 
    Log.d(TAG, "mApp = "+mApp); 
    Log.d(TAG, "mApp.getList() = "+mApp.getList()); // HERE it is NULL on 2nd call 
    // Init date 
    initDate(); 
    // Init all fields 
    initFields() ; 
    // getSupportActionBar 
    ... 
} 

То, что я не понимаю:

  • На обоих AddEntryActivity и ModifyEntryActivity, то OnCreate то же самое (простой вызов super.onCreate)
  • На ModifyEntryActivity, я получаю mApp.getList = null при втором вызове
  • Это se ems в большинстве случаев, в AddEntryActivity, mApp.getList возвращает правильное значение. Подождите, я попробовал еще раз, и это не всегда так

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

N.B. Если я не измените изображение, все в порядке, и запись добавлена ​​/ изменена правильно

Не могли бы вы помочь мне найти, что не так, пожалуйста?

ответ

0

Я нашел, что не так.

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

Для того, чтобы исправить это, я должен был переопределить метод onSaveInstanceState для того, чтобы поместить значения моего списка в нем - и извлекать значения в любом onCreate или в onRestoreInstanceState. После этого я могу снова установить список в своем приложении с помощью getApplication().setList(myRetrievedList). Для записи я помещаю переопределяющие методы в абстрактную деятельность.

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

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

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