java - 如何将点击从 Activity 用户界面传递到 map fragment 以将 map 更改为 MAP_TYPE_HYBRID

标签 java android google-maps android-studio onclicklistener

我有一个保存我的 map fragment 的 Activity 。我在 Activity 中编写了 UI xml,此 Activity 中有一个按钮显示在 map fragment 上。本地图显示在屏幕上时,用户可以单击此按钮,这会将 map 从普通 map 类型更改为混合 map 类型。换句话说,我想将 map 更改为 GoogleMap.MAP_TYPE_HYBRID。

我尝试过的: 我在按钮上设置了一个 onclick 监听器,并将其放在 onMapReady 下的 map fragment 中,如下所示:

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 中设置它,但它似乎不喜欢那样并崩溃了。我是否应该尝试将值从 Activity 传递到 map fragment ,如果是,我应该怎么做?

提前致谢

最佳答案

当您在 onCreate 方法中设置 OnClickListener 时,很难说出为什么您的应用会崩溃,因为您没有提供完整的代码,但请尝试下面的工作代码有关如何通过单击按钮更改 map 类型的演示和指导。

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_width="match_parent"
    android:layout_height="match_parent">

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

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

希望这对您有所帮助!

关于java - 如何将点击从 Activity 用户界面传递到 map fragment 以将 map 更改为 MAP_TYPE_HYBRID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59183275/

相关文章:

java - 在 Android 应用发送的 HTTP 请求之间维护 cookie

google-maps - 谷歌地图。如何在给定中心点坐标的情况下创建 LatLngBounds 矩形(正方形)

javascript - 如何将变量从 javascript 传递到表单?

android - kotlin 中的 isEmpty 和 isBlank 有什么区别

java - 在单个函数中重构 java,检查不同数据类型的 null 值

Java Web Start 应用程序获得不受限制的访问权限,但仍请求许可

jvm - 为什么不是所有的 java 字节码最初都解释为机器码?

android - 如何使用安卓:Layout_marginLeft dynamically in Android for TextView

Angular Google Maps(AGM)不可见

java - HtmlEmail 中用于将邮件设置为多个收件人的 setTo 方法存在问题