Был ли кейс когда надо было поместить один объект на два экрана

Ответ

Да, такое бывает, например, при передаче объекта между фрагментами или активити.

Решение 1: Передавать Parcelable объект через Bundle:

// Отправка
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("user", user as Parcelable)
startActivity(intent)

// Получение
val user = intent.getParcelableExtra<User>("user")

Решение 2: Использовать ViewModel с SharedViewModel, если фрагменты в одном активити:

class SharedViewModel : ViewModel() {
    val sharedData = MutableLiveData<DataObject>()
}

// Фрагмент 1
sharedViewModel.sharedData.value = dataObject

// Фрагмент 2
sharedViewModel.sharedData.observe(viewLifecycleOwner) { data -> 
    // use data
}

Важно: Не хранить тяжелые объекты или ссылки на Context/View, чтобы избежать утечек памяти.

Ответ 18+ 🔞

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

Решение первое, классическое, как дверь: сделать объект Parcelable и пихнуть его в Bundle. Ёпта, звучит сложно, а на деле — раз плюнуть.

// Отправляешь, как чемодан в аэропорту
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("user", user as Parcelable) // Кастуешь, и всё
startActivity(intent)

// А на другом конце ловишь, как подачку
val user = intent.getParcelableExtra<User>("user")

Вот тут главное — не забыть в самом классе User прописать все эти writeToParcel и CREATOR. А то будет тебе хиросима, а не передача данных.

Решение второе, для умных: если твои фрагменты сидят в одном активити и ссорятся, как соседи, то им нужен общий ящик — SharedViewModel.

class SharedViewModel : ViewModel() {
    val sharedData = MutableLiveData<DataObject>() // Вот этот общий стул
}

// Фрагмент-болтун кладёт данные
sharedViewModel.sharedData.value = dataObject

// Фрагмент-тихоня подслушивает и забирает
sharedViewModel.sharedData.observe(viewLifecycleOwner) { data ->
    // Используешь, пока горячо
}

Это, бля, удобно, потому что не надо ничего пихать в намерения, всё само течёт, как река.

И главное, запомни, чувак: не тащи в эти передаваемые объекты ничего тяжёлого! Контексты, вьюхи, ссылки на активити — это всё прямой билет в мир утечек памяти. Положишь туда картинку на 10 мегабайт — и приложение накроется медным тазом, как только система решит почистить память. Доверия к таким костылям — ноль ебать. Будь проще, передавай только данные, а всё остальное подтягивай заново. Э, бошка, думай!