Есть одно действие и два фрагмента. Вы можете переключиться на другой фрагмент, нажав кнопку (на панели действий в меню параметров). При нажатии кнопки фрагмент заменяется соответствующим другим фрагментом.
Чтобы убедиться, что нужный фрагмент помещается в контейнер фрагментов, сначала необходимо идентифицировать текущий отображаемый фрагмент, а затем заменить.
when(supportFragmentManager.findFragmentByTag("test")!!.id) {
foodListFragment.id -> {
supportFragmentManager
.beginTransaction()
.replace(R.id.main_fragment_container,consumedFoodListFragment,"test")
.commit()
}
consumedFoodListFragment.id -> {
supportFragmentManager
.beginTransaction()
.replace(R.id.main_fragment_container,foodListFragment,"test")
.commit()
}
}
Одна из проблем, с которой я столкнулся, заключалась в том, что frag.id зависит от экземпляра и не является фиксированным, поэтому я создал два экземпляра в классе Main Activity:
class MainActivity : AppCompatActivity() {
private val foodListFragment by lazy { FoodListFragment() }
private val consumedFoodListFragment by lazy { ConsumedFoodListFragment() }
...
}
(1) Главный вопрос, который у меня есть: это плохая практика? Мое предположение было бы да, потому что, поскольку есть ссылка на фрагмент внутри Main Activity, жизненный цикл фрагмента зависит от жизненного цикла действия, и это неправильно, так как жизненный цикл фрагмента должен быть независимым от активности, которую вы выполняете? Верны ли эти рассуждения?
(2) Еще один вопрос: что может быть более элегантным решением этой проблемы (определение того, какой фрагмент отображается в данный момент, и замена его)?