2013-08-27 3 views
0

Я новичок в программировании на Android.Фрагмент имеет цель не в Fragment Manager

Я просто пытаюсь сохранить состояние ListView в моем фрагменте. Для этого я следую безголовым фрагментам (фрагмент, который не имеет UI). В этом фрагменте я сохраняю данные, используемые в ListView, и запускает безглавой фрагмент из основного фрагмента (тот, который имеет пользовательский интерфейс).

Теперь я получил исключение:

java.lang.IllegalStateException: Failure saving state: RetainedFragment{4161f850 #1 work} has target not in fragment manager: JobOpeningFramgent{41601c00} 

Насколько мое беспокойство, это происходит, когда я пытаюсь заменить фрагменты с другой в DrawerLayout.

Пожалуйста, исправьте причину этого исключения, чтобы лучше понять.

Спасибо.

Boopathy.

+0

Опубликовать свой код. Предположим, что у вас есть класс, который расширяет фрагмент и другой статический внутренний класс, который расширяет фрагмент с помощью setRetainInstance (true) !! Затем вы вызываете innerClass.setTargetFragment. Когда наружный фрагмент разрушен, что происходит? Исходный код [здесь] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/support/v4/app/FragmentManager. java # FragmentManagerImpl.saveAllState% 28% 29) – Davide

ответ

0

Я не уверен, что вы хотите сохранить и где вы хотите его сохранить.

Официальные документы утверждают, что: "A Fragment represents a behavior or a portion of user interface in an Activity."

Использование Fragment как контейнер состояния пользовательского интерфейса другого фрагмента, как правило, плохая идея.

Если вы хотите сохранить некоторые значения на протяжении всего жизненного цикла деятельности (включая вращения экрана), просто переопределите метод onSaveInstanceState. Если вы хотите сохранить некоторые переменные, даже после того, как деятельность прижизненного класса использование singelton или Preferences, и если вы хотите сохранить ваши ценности даже после того, как приложение использования прижизненного SharedPreferences

Просьба подробно о том, что вы exacly хотите

+0

Я извлекаю данные из сети. Во время изменения конфигурации фрагмент и соответствующая активность подвергаются жизненному циклу. Так что это снова загрузка из сети. Скорее, я следую этому [статье] (http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html) и сохранил значения в безгласных фрагментах. Теперь я получаю исключение выше. Надеюсь, теперь я понятен! – Boopathy

2

Вот обходной путь:

положить это в отрывке, который вызывает проблемы:

@Override 
public void onSaveInstanceState(final Bundle outState) { 
    setTargetFragment(null, -1); 
      ... 

и не забудьте установить его в реальный целевой фрагмент, когда вам это нужно.