AAC - Как избежать ссылки на активность в viewmodel - PullRequest
0 голосов
/ 21 сентября 2019

FusedLocationProviderClient, который я использую для получения информации о местоположении, требует ссылки на действие или контекст.Когда я пытаюсь создать экземпляр моего UserLocationService - который реализует FusedLocationProviderClient - внутри модели представления, я должен передать ссылку на действие.

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

Я не хочу передавать какую-либо ссылку наViewModel.Каков правильный подход в этом случае?Я мог бы использовать UserLocationService непосредственно во фрагменте, но, насколько я понимаю, модель представления должна выполнять создание и инициализацию.

1 Ответ

1 голос
/ 21 сентября 2019

Вы должны использовать 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()

...