Android Room with Jetpack Compose -更新LiveData后添加一个项目在另一个活动.&



我在NewContactActivity上添加了一个新联系人,在完成对DB的插入后关闭了该活动,但这不会更新联系人列表

MainActivity:

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
AppTheme {
val contatoViewModel: ContatoViewModel = viewModel(factory = ContatoViewModelFactory(LocalContext.current.applicationContext as Application))
val contatos = contatoViewModel.readAllData.observeAsState(listOf()).value
val novoContatoLaunch = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
run {
when(it.resultCode) {
RESULT_OK -> {
Toast.makeText(this@MainActivity, "Contato Salvo!", Toast.LENGTH_LONG).show()
//TODO I need to update the contatos here
}
}
}
}
MainView(contatos) {
novoContatoLaunch.launch(Intent(this@MainActivity, NovoContatoActivity::class.java))
}
}
}
}

NewContactActivity

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
AppTheme {
val contatoViewModel: ContatoViewModel = viewModel(factory = ContatoViewModelFactory(LocalContext.current.applicationContext as Application))
NovoContatoView {
contatoViewModel.addContato(it)
setResult(RESULT_OK)
finish()
}
}
}
}

似乎答案将在您的ContatoViewModel中。如果您通过房间库使用LiveData,则应在数据库更改后自动更新。如果没有,只需调用ContatoViewModel中的一些方法,将从数据库中读取更改并更新底层实时数据