0

FusedLocationProviderClient我用来获取位置信息的需要引用活动或上下文。当我尝试在视图模型中实例化我的UserLocationService- 它实现FusedLocationProviderClient- 时,我必须传递对活动的引用。

class UserLocationService {
public val locationUpdates: MutableLiveData<Location> = MutableLiveData()
private var fusedLocationClient: FusedLocationProviderClient
constructor(activity: Activity) {
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)
...

我不想传递对视图模型的任何引用。在这种情况下,正确的方法是什么?我可以UserLocationService直接在片段中使用,但我的理解是,视图模型应该进行实例化和初始化。

4

1 回答 1

2

您应该使用AndroidViewModel

编辑:

所以你可以做的是拥有视图模型类。

class MyViewModel(application: Application) : AndroidViewModel(application) {
    private val context = application.applicationContext

}

然后根据需要使用上下文。

要初始化视图模型,您可以在活动中执行类似的操作。

private val myViewModel: MyViewModel by lazy {
    ViewModelProviders.of(this).get(MyViewModel::class.java)
}

然后在之后使用它onCreate()

于 2019-09-21T18:38:11.730 回答