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的版本时,这种方式也更加方便。

相关内容

热门资讯

红龙扑克辅助器!红龙扑克电脑模... 红龙扑克辅助器!红龙扑克电脑模拟器,(红龙扑克)切实存在有挂(详细辅助器教程)是一款可以让一直输的玩...
红龙扑克辅助器!红龙扑克辅助器... 红龙扑克辅助器!红龙扑克辅助器,(红龙扑克)好像存在有挂(详细辅助工具教程)是一款可以让一直输的玩家...
红龙扑克辅助器!红龙扑克好友桌... 红龙扑克辅助器!红龙扑克好友桌,(红龙扑克)切实有挂(详细辅助教程)1、完成的残局,帮助玩家取得所有...
wepoke辅助插件!we-p... wepoke辅助插件!we-poke有挂吗(wepoke黑科技)一贯真的是有挂(详细ai机器人教程)...
智星德州菠萝!德州ai人工智能... 智星德州菠萝!德州ai人工智能,德扑之星解说好像有挂(详细有作弊教程);原来确实真的有挂(需添加指定...
wepoke辅助技巧!wepo... wepoke辅助技巧!wepoker真的有挂吗(Wepoke专用)确实真的是有挂(详细ai机器人教程...
aapoker辅助工具存在!a... aapoker辅助工具存在!aapoker辅助工具,(aapoker有挂)好像真的是有挂(详细透明挂...
wepoke辅助挂!wepow... wepoke辅助挂!wepower软件靠谱吗(Wepoke猫腻)都是真的是有挂(详细黑科技教程);w...
wepower辅助器!wepo... wepower辅助器!wepoke有挂吗(wepoke玄学)原来有挂(详细辅助插件教程);支持2-1...
红龙扑克辅助工具!红龙扑克ai... 红龙扑克辅助工具!红龙扑克ai,(红龙扑克)其实有挂(详细辅助工具教程)平台为新手玩家设计了多种软件...