Назад к вопросам
Junior — Middle
67
Объясните механизм работы делегатов ViewModel и как они взаимодействуют с остальной частью архитектуры приложения.
Компании, где спрашивали
EDJE
Ответ от нейросети
sobes.tech AI
Делегаты ViewModel — это интерфейсы или объекты, через которые ViewModel передаёт события или команды во View (Activity/Fragment) без прямой зависимости.
Механизм работы:
- ViewModel содержит логику и состояние UI.
- Для взаимодействия с View она использует делегаты — интерфейсы с методами обратного вызова.
- View реализует эти интерфейсы и передаёт свою реализацию в ViewModel.
- Когда в ViewModel происходит событие (например, навигация или отображение сообщения), она вызывает метод делегата.
Это помогает разделить ответственность и сделать архитектуру более чистой, так как ViewModel не зависит напрямую от конкретной реализации View.
Пример:
interface ViewDelegate {
fun showError(message: String)
fun navigateToDetails(id: Int)
}
class MyViewModel : ViewModel() {
var delegate: ViewDelegate? = null
fun onButtonClicked() {
// Некоторая логика
if (error) {
delegate?.showError("Ошибка загрузки")
} else {
delegate?.navigateToDetails(42)
}
}
}
// В Activity или Fragment
class MyActivity : AppCompatActivity(), ViewDelegate {
private val viewModel = MyViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.delegate = this
}
override fun showError(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
override fun navigateToDetails(id: Int) {
// Навигация
}
}