簡體   English   中英

Android Jetpack Compose 從 Composable 內的 Fragment 獲取活動視圖模型

[英]Android Jetpack Compose get Activity View Model from Fragment inside Composable

我在從可組合的片段中獲取活動視圖模型時遇到問題

private val birthdayViewModel: BirthdayViewModel by activityViewModels()

當我使用 viewModels() 時沒有問題

private val birthdayViewModel: BirthdayViewModel by viewModels()

以可組合的方式獲取視圖模型

val birthdayViewModel: BirthdayViewModel = viewModel()
val formItem by birthdayViewModel.birthdayFormItem.observeAsState()

問題是使用 activityViewModels 時表單項錯誤為 null 而使用 viewModels 時則不然

當我在調試模式下運行以檢查 formItem 的值時,我收到此錯誤消息:“找不到類型為 com.form.FormSpec$FormItem 的局部變量‘formItem’”

這可能是 gradle 版本控制問題嗎?

請幫忙 :)

如果您沒有使用 Hilt,假設您已經在您的活動中像這樣實例化了您的視圖模型:

val viewModel: YourViewModel by viewModels()

你可以使用這個獲得相同的實例:

val viewModel = viewModel(
    modelClass = YourViewModel::class.java,
    viewModelStoreOwner = LocalContext.current as YourActivity
)
private val activityViewModel: ActivityViewModel by activityViewModels()
private val fragmentViewModel: FragmentViewModel by viewModels()

Composable(fragmentViewModel, activityViewModel)

問題與范圍有關。 我沒有將視圖模型直接傳遞到我的可組合中,而是在可組合構造函數中執行此操作,這不會導致我的兩個視圖模型都具有片段范圍。

Composable(
   fragmentViewModel: FragmentViewModel = viewModel(), 
   activityViewModel: ActivityViewModel = viewModel()
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM