0

我正在使用 hilt 进行依赖注入,我找不到直接在可组合内获取视图模型的方法,因为我们不能将 @AndroidEntryPoint 注释与 compose 一起使用,当我从活动传递它时它工作正常..

4

3 回答 3

0

像这样的东西。。

@HiltViewModel
class MyVm @Inject constructor(
  private val someDep: SomeDep,
) : ViewModel() {}

我的观点 - 在这种情况下考虑它的片段

@AndroidEntryPoint
class MYFragment : Fragment() {
  private val viewModel: MyVm by viewModels()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
    return ComposeView(requireContext()).apply {
      setContent {
        MYTheme {
          MyTopLevelComposableScreen(
            viewModel = viewModel
          )
        }
      }
    }
  }
}

还有我的顶级可组合

@Composable
fun MyTopLevelComposableScreen(vm:MyVm){
}

或直接在顶层可组合

    @Composable
    fun MyTopLevelComposableScreen(vm: MyVm = viewModel()){
    }

https://developer.android.com/jetpack/compose/libraries#hilt

于 2021-09-17T21:02:11.317 回答
0

你可以像这样注入你的viewModel

@Composable fun MainScreen(viewModel: HomeScreenViewModel = hiltViewModel())

您可以在此链接中查看我的示例项目以获取更多信息github

于 2021-09-19T05:16:03.827 回答
0

首先,实现这个模块:

implementation("androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07")

而且,您可以像这样使用它:

@Composable
private fun MyLayout() {
    val vm: MyViewModel = viewModel() // @HiltViewModel
...

[Android 开发者指南]

于 2021-09-19T16:03:09.740 回答