Ответ
Да, такое бывает, например, при передаче объекта между фрагментами или активити.
Решение 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 мегабайт — и приложение накроется медным тазом, как только система решит почистить память. Доверия к таким костылям — ноль ебать. Будь проще, передавай только данные, а всё остальное подтягивай заново. Э, бошка, думай!