← Назад к вопросам

У какого класса вызывается метод replace при навигации с помощью Fragment

2.0 Middle🔥 91 комментариев
#Жизненный цикл и навигация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

У какого класса вызывается метод replace при навигации с помощью Fragment

Метод replace() вызывается у класса FragmentTransaction. Это класс, который управляет операциями с фрагментами (добавление, удаление, замена, скрытие и т.д.).

Как это работает

// 1. Получаем FragmentManager
val fragmentManager = supportFragmentManager

// 2. Начинаем транзакцию (получаем FragmentTransaction)
val transaction = fragmentManager.beginTransaction()

// 3. Вызываем replace() на FragmentTransaction
transaction.replace(R.id.container, NewFragment())

// 4. Применяем изменения
transaction.addToBackStack(null)  // Добавляем в back stack
transaction.commit()

Современный подход с replaceReusable()

На Android Jetpack рекомендуют использовать более новый API:

val fragmentManager = supportFragmentManager
fragmentManager.beginTransaction()
    .replace(R.id.container, NewFragment(), "TAG")
    .addToBackStack(null)
    .commit()

Классы в иерархии

FragmentManager
  └─ beginTransaction() → FragmentTransaction
       └─ replace()
       └─ add()
       └─ remove()
       └─ addToBackStack()
       └─ commit()

Полный пример навигации

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                .add(R.id.container, HomeFragment())
                .commit()
        }
    }
    
    fun navigateToDetails() {
        supportFragmentManager.beginTransaction()
            .replace(R.id.container, DetailsFragment())
            .addToBackStack(null)
            .commit()
    }
}

Разница между add() и replace()

  • add() — добавляет фрагмент поверх существующего
  • replace() — удаляет текущий фрагмент и добавляет новый

Ответ: FragmentTransaction — это класс, у которого вызывается метод replace() при навигации.