Совместное использование модели MainActivity ViewModel между экранами созданияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Совместное использование модели MainActivity ViewModel между экранами создания

Сообщение Anonymous »

Я работаю с JetpackCompose, и у меня есть класс Observable BatteryBroadcast жизненного цикла, который внедряется в MainActivity с помощью Hilt, и я хочу передавать данные из BatteryBroadcast в ViewModel для использования эти данные в составных экранах. Итак, как я могу использовать один и тот же экземпляр ViewModel на всех составных экранах активности? Я использую NavHost для составных экранов.

Код: Выделить всё

class MainActivity : ComponentActivity() {

@Inject
lateinit var batteryBroadcast: BatteryBroadcast

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContent {
BatteryAlarmGoldTheme {

val homeViewModel = hiltViewModel()
lifecycle.addObserver(batteryBroadcast)
homeViewModel.setBatteryProfileData(batteryBroadcast.dataFlow)

// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
BatteryAlarmGoldApp()
}
}
}
}
}
Моя диаграмма создания.

Код: Выделить всё

fun NavGraphBuilder.homeNavGraph(
navController: NavHostController
) {
navigation(startDestination = Screen.HomeScreen.route, route = HOME_ROUTE) {
composable(Screen.HomeScreen.route) {
val homeBackStackEntry = remember { navController.getBackStackEntry(HOME_ROUTE) }
val homeViewModel: HomeViewModel = hiltViewModel(homeBackStackEntry)

HomeScreen(
navController = navController,
viewModel = homeViewModel
)
}
composable(Screen.SelectRingtoneScreen.route) {
val homeBackStackEntry = remember { navController.getBackStackEntry(HOME_ROUTE) }
val homeViewModel: HomeViewModel = hiltViewModel(homeBackStackEntry)

RingtoneScreen(
viewModel = homeViewModel
)
}
}
}
Я попытался @Inject BattryBroadcast в функции Compose, где у меня также есть доступ к ViewModel, чтобы я мог использовать один и тот же экземпляр ViewModel для установки и получения данных, но не возможность использовать @Inject в функции создания.

Подробнее здесь: https://stackoverflow.com/questions/711 ... se-screens
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»