AAC - 如何避免在视图模型中引用 activity
AAC - How to avoid reference to activity in viewmodel
我用来获取位置信息的 FusedLocationProviderClient
需要对 activity 或上下文的引用。当我尝试实例化我的 UserLocationService
- 它实现了 FusedLocationProviderClient
- 在视图模型中,我必须传递对 activity.
的引用
class UserLocationService {
public val locationUpdates: MutableLiveData<Location> = MutableLiveData()
private var fusedLocationClient: FusedLocationProviderClient
constructor(activity: Activity) {
fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)
...
我不想传递对视图模型的任何引用。在这种情况下,正确的方法是什么?我可以直接在片段中使用 UserLocationService
但我的理解是,视图模型应该进行实例化和初始化。
你应该使用 AndroidViewModel.
编辑:
所以你可以做的是拥有视图模型 class。
class MyViewModel(application: Application) : AndroidViewModel(application) {
private val context = application.applicationContext
}
然后根据需要使用上下文。
要初始化视图模型,您可以在 activity 中执行类似的操作。
private val myViewModel: MyViewModel by lazy {
ViewModelProviders.of(this).get(MyViewModel::class.java)
}
然后在onCreate()
之后使用
我用来获取位置信息的 FusedLocationProviderClient
需要对 activity 或上下文的引用。当我尝试实例化我的 UserLocationService
- 它实现了 FusedLocationProviderClient
- 在视图模型中,我必须传递对 activity.
class UserLocationService {
public val locationUpdates: MutableLiveData<Location> = MutableLiveData()
private var fusedLocationClient: FusedLocationProviderClient
constructor(activity: Activity) {
fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)
...
我不想传递对视图模型的任何引用。在这种情况下,正确的方法是什么?我可以直接在片段中使用 UserLocationService
但我的理解是,视图模型应该进行实例化和初始化。
你应该使用 AndroidViewModel.
编辑:
所以你可以做的是拥有视图模型 class。
class MyViewModel(application: Application) : AndroidViewModel(application) {
private val context = application.applicationContext
}
然后根据需要使用上下文。
要初始化视图模型,您可以在 activity 中执行类似的操作。
private val myViewModel: MyViewModel by lazy {
ViewModelProviders.of(this).get(MyViewModel::class.java)
}
然后在onCreate()