#android-studio #kotlin #android-fragments #bottomnavigationview
#android-студия #котлин #android-фрагменты #вид снизу вверх
Вопрос:
Я пытаюсь создать один элемент навигации для своей игры, и фрагменты этого элемента навигации автоматически меняются с помощью функции switchFragment(). Другой элемент навигации, который я сделал для статистики, но когда я использую switchfragment (), панель навигации не отвечает, и я получаю сообщение об ошибке: Игнорирование вызова navigate (): FragmentManager уже сохранил свое состояние
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private val gameViewModel: GameViewModel by viewModels() private lateinit var navController: NavController val gameFragment = GameFragment() val guessWordFragment = GuessWordFragment() val loseScreenFragment = LoseScreenFragment() val winScreenFragment = WinScreenFragment() val statsFragment = StatsFragment() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val navHostFragment = supportFragmentManager .findFragmentById(R.id.fragment_activity_main) as NavHostFragment navController = navHostFragment.navController NavigationUI.setupActionBarWithNavController(this, navController) findViewByIdlt;BottomNavigationViewgt;(R.id.bottomNav) .setupWithNavController(navController) switchFragments() } fun switchFragments() { // switch between fragments when game PHASE changes with observer if(!statsFragment.isResumed) { gameViewModel.gamePhase().observe(this, Observer { when (it) { GameViewModel.PHASE.SPIN -gt; supportFragmentManager.beginTransaction() .apply { replace(R.id.fragment_activity_main, gameFragment) commit() } GameViewModel.PHASE.WORD_GUESSING -gt; supportFragmentManager.beginTransaction() .apply { replace(R.id.fragment_activity_main, guessWordFragment) commit() } GameViewModel.PHASE.Lose -gt; supportFragmentManager.beginTransaction() .apply { replace(R.id.fragment_activity_main, loseScreenFragment) commit() } GameViewModel.PHASE.WIN -gt; supportFragmentManager.beginTransaction().apply { replace(R.id.fragment_activity_main, winScreenFragment) commit() } } }) } } override fun onOptionsItemSelected(item: MenuItem): Boolean { return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item) } }