簡體   English   中英

Android Compose MVVM - 如何在不采用 ZDBC7611CAA5BDABD8EFF799 的可組合 function 中引用 viewModel object

[英]Android Compose MVVM - How to reference a viewModel object in a Composable function that doesn't take arguments?

@Composable ContentFeed() function 如何訪問在 Activity 中創建的viewModel 依賴注入? 或者這是一種錯誤的做事方式? viewModel應該總是只有一個實例。

// MainActivity.kt
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val viewModel by viewModels<MainViewModel>()
        setContent {
        PracticeTheme {
            // A surface container using the 'background' color from the theme
            Surface(color = MaterialTheme.colors.background) {
                PulseApp(viewModel)
            }
        }
    }
}

// TabItem.kt
typealias ComposableFun = @Composable () -> Unit

sealed class TabItem(var icon: Int, var title: String, var content: ComposableFun) {
    object Feed : TabItem(R.drawable.ic_baseline_view_list_24, "Feed", { ContentFeed() })
}

// Content.kt
@Composable
fun ContentFeed() {
    // I need viewModel created in MainActivity.kt here
}

在任何可組合中,您都可以使用viewModel<YourClassHere>()

返回現有ViewModel或在給定所有者(通常是片段或活動)中創建新視圖模型,默認為LocalViewModelStoreOwner提供的所有者。

目前 Compose 中唯一的例外是,當它沒有綁定到活動/片段時,是當您使用 Compose Navigation 時。 在這種情況下,店主綁定到每條路線,請參閱thisthis answer了解如何在路線之間共享店主。

文檔中查看有關視圖模型撰寫的更多信息。

暫無
暫無

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

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