如何将活动 UI 的点击传递到地图片段以将地图更改为 MAP_TYPE_HYBRID

Posted

技术标签:

【中文标题】如何将活动 UI 的点击传递到地图片段以将地图更改为 MAP_TYPE_HYBRID【英文标题】:How to pass click from activity UI to map fragment to change map to MAP_TYPE_HYBRID 【发布时间】:2020-03-29 16:25:10 【问题描述】:

我有一个包含我的地图片段的活动。我已经在活动中编写了 UI xml,并且此活动中有一个按钮显示在地图片段上。当地图显示在屏幕上时,用户可以单击此按钮,它将地图从普通地图类型更改为混合地图类型。换句话说,我想将地图更改为 GoogleMap.MAP_TYPE_HYBRID。

我尝试过的: 我在按钮上设置了一个 onclick 侦听器,并将其放在 onMapReady 下的地图片段中,如下所示:

mapType_hybrid = getActivity().findViewById(R.id.mapType_hybrid);
mapType_hybrid.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            
        );

当我点击按钮时,什么也没有发生。

我是否错过了将点击侦听器设置在错误位置之类的内容?我尝试在 onCreate 中设置它,但它似乎不喜欢那样并且崩溃了。我是否应该尝试将活动中的值传递给地图片段,如果可以,我应该怎么做?

提前致谢

【问题讨论】:

【参考方案1】:

当您在 onCreate 方法中设置 OnClickListener 时,由于您没有提供完整代码,因此很难说出您的应用崩溃的原因,但请尝试下面的工作代码,以获取有关如何更改地图类型的演示和指导可以实现对按钮的点击。

MapsActivity.java

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback 

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        final Button button = findViewById(R.id.button_id);
        button.setOnClickListener(new View.OnClickListener() 
            public void onClick(View v) 
                mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            
        );
    

    @Override
    public void onMapReady(GoogleMap googleMap) 
        mMap = googleMap;

        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    

activity_maps.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_>

    <Button
        android:id="@+id/button_id"
        android:layout_
        android:layout_
        android:text="Switch to Hybrid Map" />

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_
        android:layout_
        tools:context=".MapsActivity" />
</RelativeLayout>

希望这会有所帮助!

【讨论】:

感谢您的回答,它帮助了我。 很高兴听到并乐于提供帮助! :)

以上是关于如何将活动 UI 的点击传递到地图片段以将地图更改为 MAP_TYPE_HYBRID的主要内容,如果未能解决你的问题,请参考以下文章

启动谷歌地图意图后返回活动

如何在地图片段活动上显示按钮

通过意图将地址传递给 Google 地图活动:

如何从片段外部清除/重置地图?

如何更改谷歌地图标记上方的标题和片段设计

片段更改时如何隐藏地图视图(谷歌地图v2)