AS
Size: a a a
AS
IQ
K
N
MG
JM
N
AT
N
M
B
K
AS
MN
MZ
A
FirstFragment
, который был добавлен(показан) из своего Activity
, а также был добавлен в backstack, делает сетевой запрос и показывает данные. После некого действие, оно заменяется SecondFragment
-ом. Как теперь опять показать FirstFragment
, не делая опять network request и не теряя view's state?(например, scroll position)Activity
, но не получается решить эту проблему. Сделать переход с FirstFragment
на SecondFragment
довольно легко, например: activity?.let {
it.supportFragmentManager.beginTransaction().replace(R.id.root, SecondFragment.newInstance(), "second-tag") .addToBackStack(null).commit()
}
SecondFragment
, обратно на FirstFragment
? Можно сделать вот так:activity?.let {
it.supportFragmentManager.popBackStack()
// или it.onBackPressed()
}
FirstFragment
создается заново. Видимо, это есть хорошо, так как Android не хранит view Fragment-а, который уже не виден юзеру. Так как использовалась addToBackStack
, насколько я понял, можно заюзать тот же instance FirstFragment
-а. А это значит что есть доступ к тем же переменным и данным из FirstFragment
-а. Но жизненный цикл FirstFragment
вызывается заново, а значит и вызывается мой запрос в сеть, который лежит в onActivityCreated
. Хотелось бы этого избежать и не делать очередной запрос. Что я накопал сам? Во-первых, это методы show/hide
. Можно их использовать и быть счастливым навсегда, но видимо, для memory это не есть хорошо. Мне так кажется что их никто не юзает и все пользуется replace
-ом. Во-вторых, можно колдавать с флагами, типа, "не делай запрос, так как этот Fragment уже был показан". Но мне кажется это костылем и глупостью. На самом деле, можно избежать повторного запроса в сеть, подписавшись на LiveData
во ViewModel
и получить актуальные уже данные. Но видимо view state все равно теряется, например, scroll position в RecyclerView
. Это кажется не особо удобным. Все таки, как решаются такие ситуации? Спасибо!JM
FirstFragment
, который был добавлен(показан) из своего Activity
, а также был добавлен в backstack, делает сетевой запрос и показывает данные. После некого действие, оно заменяется SecondFragment
-ом. Как теперь опять показать FirstFragment
, не делая опять network request и не теряя view's state?(например, scroll position)Activity
, но не получается решить эту проблему. Сделать переход с FirstFragment
на SecondFragment
довольно легко, например: activity?.let {
it.supportFragmentManager.beginTransaction().replace(R.id.root, SecondFragment.newInstance(), "second-tag") .addToBackStack(null).commit()
}
SecondFragment
, обратно на FirstFragment
? Можно сделать вот так:activity?.let {
it.supportFragmentManager.popBackStack()
// или it.onBackPressed()
}
FirstFragment
создается заново. Видимо, это есть хорошо, так как Android не хранит view Fragment-а, который уже не виден юзеру. Так как использовалась addToBackStack
, насколько я понял, можно заюзать тот же instance FirstFragment
-а. А это значит что есть доступ к тем же переменным и данным из FirstFragment
-а. Но жизненный цикл FirstFragment
вызывается заново, а значит и вызывается мой запрос в сеть, который лежит в onActivityCreated
. Хотелось бы этого избежать и не делать очередной запрос. Что я накопал сам? Во-первых, это методы show/hide
. Можно их использовать и быть счастливым навсегда, но видимо, для memory это не есть хорошо. Мне так кажется что их никто не юзает и все пользуется replace
-ом. Во-вторых, можно колдавать с флагами, типа, "не делай запрос, так как этот Fragment уже был показан". Но мне кажется это костылем и глупостью. На самом деле, можно избежать повторного запроса в сеть, подписавшись на LiveData
во ViewModel
и получить актуальные уже данные. Но видимо view state все равно теряется, например, scroll position в RecyclerView
. Это кажется не особо удобным. Все таки, как решаются такие ситуации? Спасибо!M
replace
не пробовал add
использоватьK
K