gpt4 book ai didi

android - MVVM - 实现谷歌地图并在 ViewModel 中拥有上下文?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:38 24 4
gpt4 key购买 nike

所以我正在学习 MVVM,喜欢它。

但是..到目前为止我的问题如下:

  • 使用 MVVM 实现谷歌地图。 (我是在 Activity 上还是在 ViewModel 上做?我只能在 Activity 上实现它..)

  • 尤其是 CONTEXT.. 可以像下面这样传递吗?

I'm using this library.

这是我的 View 模型:

public class DashboardViewModel implements ViewModel {

public final ObservableField<String> dashButton = new ObservableField<>("");
public final Action onRandomSearch;
private Context context;



public DashboardViewModel(Context context) {
this.context = context;

onRandomSearch = () -> {
String randomString = UUID.randomUUID().toString();
String randomQuery = randomString.substring(0, 3) + " " + randomString.substring(5, 8);
dashButton.set(randomQuery); //JUST TO TEST
};
}

}

这是我的 Activity :

public class DashboardActivity extends MvvmActivity {
@NonNull
@Override
protected ViewModel createViewModel() {
loadMap();

return new DashboardViewModel(this);
}

@Override
protected int getLayoutId() {
return R.layout.activity_dashboard;
}

private void loadMap() {
SupportMapFragment mapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

startLocation();

...

现在,为了让谷歌地图在我的应用程序上运行,我必须实现 OnMapReadyCallback,如下所示:

public class DashboardActivity extends MvvmActivity implements OnMapReadyCallback

我需要与我在 DashboardActivity 中实现的获取当前位置的方法通信。

我是否应该迁移逻辑以使 map 在 ViewModel 中工作?

我有点迷路了。

最佳答案

我在 MVVM 中遇到了与 SupportMapFragment 相同的问题。对于临时解决方案,我使用了 mapview 而不是 SupportMapFragment。

首先您需要在 CustomBinding 中创建一个方法。

@BindingAdapter("initMap")
public static void initMap(final MapView mapView, final LatLng latLng) {

if (mapView != null) {
mapView.onCreate(new Bundle());
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
// Add a marker
googleMap.addMarker(new MarkerOptions().position(latLng).title("Marker in India"));
}
});
}
}

xml文件的代码

           <com.google.android.gms.maps.MapView
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="200dp"
app:initMap="@{viewmodel.mMapLatLngObservable}" />

在 viewmodel 类中你必须使用一个观察者字段

public ObservableField<LatLng>  mMapLatLng = new ObservableField<>();

因此,当您在上面的观察者变量 (mMapLatLng) 中设置当前位置时,您的 OnMapReadyCallback 将被调用。

关于android - MVVM - 实现谷歌地图并在 ViewModel 中拥有上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45202531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com