【发布时间】:2020-03-18 16:44:33
【问题描述】:
我试图在 Android 应用程序中按下按钮时简单地获取用户的位置。 我的应用使用数据绑定意味着我们拥有:
- 一个单一的主要活动
- 片段(视图)
- 与我的存储库交互的视图模型
问题是我的按钮按下是在 Viewmodel 中处理的,但我只能在 View 中获取 GPS 位置。 这就是我使用此类 https://github.com/Miserlou/Cop-Recorder-2/blob/master/src/org/ale/coprecord/MyLocation.java 在片段中获取 GPS 位置的方式:
LocationResult locationResult = new LocationResult(){
@Override
public void gotLocation(Location location){
newSessionViewModel.getPositionObtained().postValue(location);
}
};
MyLocation myLocation = new MyLocation();
gotLocation = myLocation.getLocation(this.getContext(), locationResult);
问题是this.getContext()。片段可以访问上下文,但我的视图模型没有。
因此,要在我的 Viewmodel 中获取位置,我必须从我的 Viewmodel 到我的 View,然后再回到我的 Viewmodel,如上所示,这既烦人又丑陋。
我发现的其他解决方案也需要传递上下文:
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
所以我的问题是,在 Viewmodel 中获取当前用户位置的最简单、最快的方法是什么?或者我应该将上下文传递给静态类中的全局变量并在我的视图模型中重用它?这可能会更快更容易。
【问题讨论】:
-
"但我的 Viewmodels 没有" -- 如果您使用的是 Jetpack
ViewModel系统,请使用AndroidViewModel而不是ViewModel作为基类来拥有Context。 -
只是想知道为什么不在片段本身中获取位置?并使用本地将数据绑定到视图
-
@ManojMohanty 片段是视图,我一直在片段中获取位置,它涉及从我的 VM 发送对片段的调用,获取位置,然后将其发送回我的 VM,在我看来这很荒谬
标签: java android android-studio