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

相关内容

热门资讯

一分钟揭秘“wepoker透视... 一分钟揭秘“wepoker透视辅助挂”开挂辅助软件(透视)2026新版教程是一款可以让一直输的玩家,...
开挂辅助工具"wep... 开挂辅助工具"wepoker破解是真的还是假的"开挂(透视)辅助平台(有挂解惑);无需打开直接搜索微...
开挂辅助下载"hhp... 开挂辅助下载"hhpoker到底可以辅助码"开挂(透视)辅助平台(有挂技术);无需打开直接搜索加薇1...
玩家实测“微扑克辅助工具免费版... 玩家实测“微扑克辅助工具免费版苹果”开挂辅助下载(透视)细节揭秘是一款可以让一直输的玩家,快速成为一...
开挂辅助软件"竞技联... 竞技联盟破解版最新版是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加...
科技通报“wepoker能不能... 您好:wepoker能不能开挂透视这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现...
开挂辅助安装"wep... 开挂辅助安装"wepoker有脚本吗"开挂(透视)辅助神器(真的有挂)>>您好:软件加1367043...
今日百科“微扑克辅助器app”... 您好:微扑克辅助器app这款游戏是可以开挂的,软件加【添加微信客服136704302】确实是有挂的,...
开挂辅助脚本"fis... 开挂辅助脚本"fishpoker透视底牌"开挂(透视)辅助神器(有挂秘诀);亲,fishpoker透...
指导大家“wepoker透视开... 指导大家“wepoker透视开挂挂视频”开挂辅助脚本(透视)必赢方法是一款可以让一直输的玩家,快速成...