2015-06-05 3 views
0

Теперь у меня есть фрагмент, чтобы сделать что-то долгое время. В некоторых случаях действие будет вызывать onSaveInstanceState, когда фрагмент все еще запущен. После того, как фрагмент сделает все, я хочу его закрыть. Здесь будет исключение Can not perform this action after onSaveInstanceState.Как правильно закрыть фрагмент?

Я знаю, что это значит, но мне действительно нужно закрыть фрагмент после того, как что-то было сделано. Поэтому, если я использую commitAllowingStateLoss, чтобы заставить фрагмент закрыться, после того, как активность воссоздается, close state не будет воссоздан, пользовательский интерфейс будет сломан.

Итак, как я должен закрыть фрагмент правильно?

+0

Не могли бы вы указать, какую работу вы делаете в своем фрагменте? – dkarmazi

+0

@dkarmazi как скачивание или другие. – zzy

ответ

1

Я не знаю безопасного способа автоматического закрытия фрагмента, и это похоже на плохую идею (почему бы вам зависеть от системы для этого?). Вам придётся своевременно установить его в приложении. Я могу дать вам предложение кода сделать это. Поскольку метода нет, вы используете вместо этого метод remove, или popBackStack. Поскольку вы не публиковали какой-либо код, я предлагаю общий способ сделать это.

код предложение с помощью удаления:

Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT); 
... 
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

transaction.remove(fragment); 
transaction.commit(); 

Примечания:

  • TAG_FRAGMENT является идентификатор фрагмента в макете.
  • findFragmentByTag() - это один из способов, другой - новый myFragment();
  • Если вам нужно время, когда Фрагмент закрыт, используйте onDetach() метод переопределения фрагмента.
+0

Также используйте onDetach of Fragment, если нужно, чтобы время, когда фрагмент закрывается. –

+0

Я знаю «FragmentTransaction», но мой вопрос заключается в том, как выполнить такую ​​функцию удаления, когда вызывается 'onSaveInstanceState'. 'commitAllowingStateLoss' может заставить функцию' remove', но не позволяет 'State' сохранять это' удаление состояния'. – zzy

+0

@zzy. Сначала вы явно не указали причину переопределения onSaveInstanceState(). Да, ваш фрагмент все еще может работать даже до этого метода. Но какова реальная проблема с этим? Если вашему фрагменту необходимо передать данные в Activity, вы можете передавать данные в onDetach() фрагмента. Я упомянул об этом в своем посте. –

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