byviewmodelsversushiltviewmodel
创始人
2025-01-12 23:00:11
0

在使用ViewModel时,我们有两种常见的依赖注入方式:

  1. 使用ViewModelProvider.Factory和ViewModelProvider得到ViewModel实例并手动注入依赖;
class MyViewModelFactory(private val myRepository: MyRepository): ViewModelProvider.Factory {
    override fun  create(modelClass: Class): T {
        return if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
            MyViewModel(myRepository) as T
        } else {
            throw IllegalArgumentException("ViewModel Not Found")
        }
    }
}

class MyFragment : Fragment() {
    private val myViewModel: MyViewModel by viewModels { MyViewModelFactory(MyRepositoryImpl()) }
    // ...
}
  1. 将ViewModel类和ViewModel的依赖注入声明为@HiltViewModel以使用Hilt自动完成依赖注入;
@HiltViewModel
class MyViewModel @Inject constructor(
    private val myRepository: MyRepository
) : ViewModel() {
    //...
}

class MyFragment : Fragment(R.layout.fragment_my) {
    private val myViewModel: MyViewModel by viewModels()
    //...
}

在使用Hilt后,我们不再需要MyViewModelFactory类。我们只需要在我们要使用该类的Activity或Fragment中添加@AndroidEntryPoint注解,然后使用viewModels()方法来获取MyViewModel的实例即可。

@AndroidEntryPoint
class MyFragment : Fragment(R.layout.fragment_my) {
    private val myViewModel: MyViewModel by viewModels()
    //...
}

这种方式要比第一种方式更为简洁。在升级App的版本时,这种方式也更加方便。

相关内容

热门资讯

透视挂透视!aapoker a... 透视挂透视!aapoker ai插件(透视)辅助(真是有挂);1、首先打开aapoker ai插件最...
透视辅助!wepoker私人局... 透视辅助!wepoker私人局俱乐部辅助,wepoker私人局可以透视(详细内置辅助)1、完成wep...
透视模拟器!aapoker辅助... 透视模拟器!aapoker辅助软件合法吗(透视)透视脚本下载(确实存在有挂)1、这是跨平台的aapo...
透视智能ai!we-poker... 透视智能ai!we-poker软件,wepoker透视底牌脚本(详细永久免费脚本);1、许多玩家不知...
透视线上!aapoker发牌逻... 透视线上!aapoker发牌逻辑(透视)透视插件(一直是有挂)1、完成aapoker发牌逻辑透视辅助...
透视辅助!wepoker轻量版... 透视辅助!wepoker轻量版透视系统,wepoker私局代打(详细黑侠辅助器)1)wepoker轻...
透视安卓版!aapoker透视... 透视安卓版!aapoker透视方法(透视)插件下载(本来是有挂)1、不需要AI权限,帮助你快速的进行...
透视有挂!有没有人wepoke... 透视有挂!有没有人wepoker,wepoker私人辅助器(详细透视最简单三个步骤)1、wepoke...
透视中牌率!wepokerpl... 透视中牌率!wepokerplus到底是挂了吗,wepoker轻量版透视(详细有脚本)1、进入游戏-...
透视讲解!aapoker怎么控... 透视讲解!aapoker怎么控制牌(透视)ai插件(果然是有挂)aapoker怎么控制牌辅助器中分为...