在多个片段上使用相同的GPS位置代码



我想制作一个包含五个不同片段的应用程序。在每个片段中,我都需要设备的GPS位置,但目的会有所不同。

为了不为每个片段实现FusedLocationProviderClient五次,我想在MainActivity中这样做一次并将结果发送到显示的片段。

作为java编程的初学者,我请求您的指导。如何确定设备的GPS位置以及位置自动发送(在每次更新时)到活动片段?

也许是服务之类的东西?任何示例代码都是受欢迎的。提前感谢!

使用ViewModel有一个简单的解决方案。

这个概念是你初始化一个状态持有者,并在你的片段中共享这个持有者的相同实例。

这个holder的实例存储在你的activity中。

你的ViewModel可能看起来像这样

public class MyViewModel extends ViewModel {
private MutableLiveData<LatLng> location = new MutableLiveData<LatLng>();
public LiveData<LatLng> getLocation() {
return location;
}
private void setLocation(LatLng value) {
location.setValue(value)
}
}

在你的活动中得到这个viewModel的实例。我们为此使用了ViewModelProvider工厂。

private MyViewModel model;
//in your activity onCreate
model = new ViewModelProvider(this).get(MyViewModel.class);
//and from location callback
model.setLocation(latlng)

在你所有的片段中,你可以观察到这些数据

//first get the same instance of your ViewModel onViewCreated
model = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
model.getLocation().observe(getViewLifecycleOwner(), item -> {
// Update the UI.
//will execture everytime new data is set
});

在你的应用程序中包含所需的依赖项build.gradle

dependencies {
def lifecycle_version = "2.0.0"
implementation  "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
}

在这里了解更多关于ViewModel的信息

相关内容

  • 没有找到相关文章

最新更新