Будучи новичком в kotlin и архитектуре mvvm, я потратил последние два дня, пытаясь найти решение этой проблемы, но безуспешно. Поэтому я ищу чистое решение для изменения фрагмента пользовательского интерфейса (в моем случае это просто просмотр текста), когда устройство подключено / отключено в inte rnet. Я использую архитектуру mvvm и компонент архитектуры android (viewmodels, livingata, привязки данных ...). У меня есть базовое действие с навигацией снизу и несколькими фрагментами.
Я пытаюсь получить событие подключения от пользовательского приемника широковещания и хочу каким-то образом передать это событие в модель представления или в мой фрагмент.
Моей первой мыслью было использование интерфейса. Этот интерфейс запускается при получении вещательного приемника, и он реализован в моем фрагменте или модели представления, поэтому, когда происходит событие inte rnet, текстовое представление обновляется в моем фрагменте. Но я не уверен, как использовать интерфейс в приемнике вещания, или я не знаю, даже если это возможно или хорошая практика.
что я до сих пор делал, это создавал широковещательный приемник
class ConnectionStateObserver: BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
//somehow use the interface in here
}
}
регистрировал / отменял регистрацию в моей базовой активности
override fun onResume() {
super.onResume()
val broadcastIntent = IntentFilter()
broadcastIntent.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
registerReceiver(ConnectionStateObserver(), broadcastIntent)
}
override fun onPause() {
super.onPause()
unregisterReceiver(ConnectionStateObserver())
}
(я знаю, что ConnectivityManager.CONNECTIVITY_ACTION устарел, но я не мог найти лучшее решение).
создать интерфейс
interface ConnectionStatusChange{
fun onChange()
}
и реализовать интерфейс в моем фрагменте
class myFragment : Fragment(), ConnectionStatusChange {
override fun onChange() {
// do the ui changes here
}
}
Я хотел бы знать, является ли этот подход хорошей практикой и как я могу сделай так, чтоб это работало. В случае, если это невозможно сделать, пожалуйста, дайте мне несколько советов (код всегда приветствуется! =)). Также было бы хорошо иметь современное, а не 5-летнее решение. Заранее спасибо.