supportfragmentmanager - android получить текущий фрагмент



Когда использовать FragmentManager:: putFragment и getFragment (2)

Короче говоря, именно так вы можете восстановить ссылку на фрагмент после восстановления Activity . Например, когда вы создаете фрагмент и используете его во всей своей деятельности, поэтому после изменения конфигурации ваша деятельность воссоздается, вы хотите, чтобы эта ссылка возвращалась. Так

public void onSaveInstanceState(Bundle outState){
   getFragmentManager().putFragment(outState,"myfragment",myfragment);
}
public void onRetoreInstanceState(Bundle inState){
   myFragment = getFragmentManager().getFragment(inState,"myfragment");
}

https://src-bin.com

У меня есть приложение, которое использует фрагменты, и я играл с тем, как использовать один и тот же фрагмент в Activity с двойной панелью и Activity как самостоятельный. Все еще не уверен в лучшем методе завершения этого, но я заметил, что FragmentManager имеет функцию putFragment и getFragment. Меня смущает то, что вы должны предоставить Bundle в качестве параметра как для функции get, так и для put. Как разделять действия имеют один и тот же пакет? Очевидно, вы могли бы передать Bundle в качестве параметра, но в этот момент я чувствую, что вы просто путаете вещи.

Итак, какой хороший сценарий для использования getFragment и putFragment? Пожалуйста, включите объяснение параметра Bundle.


Answer #1

Основной ответ:

Они полезны только при реализации onSaveInstanceState () и восстановления этого состояния в onCreate (). Если вы не используете onSaveInstanceState (), вы можете забыть об этих методах и притворяться, будто они не существуют.

Проблема, которую они решают: если вы хотите сохранить ссылку на фрагмент в «сохраненном состоянии экземпляра», вы не можете просто разместить ссылку на объект там. Во-первых, потому что вы не можете поместить простой объект в Bundle. :) И причина этого в том, что точка этого сохраненного состояния заключается в том, что он будет скопирован из вашего процесса, поэтому, если ваш процесс нужно убить, он может быть позже скопирован обратно в новый процесс, -инициализировать свою активность / фрагмент. Необработанный объект имеет смысл только в контексте процесса, в котором он запущен, поэтому невозможно правильно скопировать ссылку на такой объект из вашего текущего процесса и в другой.

Итак, что putFragment () / getFragment () делает, размещает кусок данных в данном Bundle, который может идентифицировать этот фрагмент в новом экземпляре вашей активности / фрагмента в другом процессе. Именно то, что это представление, не определено, но в текущей реализации это внутренний целочисленный идентификатор для этого фрагмента, который будет использоваться позже, когда FragmentManager должен заново создать этот фрагмент из ранее сохраненного состояния ... это повторно созданный с тем же идентификатором, поэтому, когда вы вызываете getFragment (), он может получить целое число и использовать его для определения правильного объекта Fragment для возврата к вызывающему, который соответствует ранее сохраненному.





android-fragments