如何将点击从 activity UI 传递到映射片段以将映射更改为 MAP_TYPE_HYBRID
How to pass click from activity UI to map fragment to change map to MAP_TYPE_HYBRID
我有一个 activity 用来保存我的地图片段。我在 activity 中写了 UI xml 并且在这个 activity 中有一个按钮显示在地图片段上。当地图显示在屏幕上时,用户可以单击此按钮,这会将地图从普通地图类型更改为混合地图类型。换句话说,我想将地图更改为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 中设置它,但它似乎不喜欢那样并崩溃了。我是否应该尝试将值从 activity 传递到地图片段,如果是这样我应该怎么做?
提前致谢
当您在 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_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>
希望对您有所帮助!
我有一个 activity 用来保存我的地图片段。我在 activity 中写了 UI xml 并且在这个 activity 中有一个按钮显示在地图片段上。当地图显示在屏幕上时,用户可以单击此按钮,这会将地图从普通地图类型更改为混合地图类型。换句话说,我想将地图更改为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 中设置它,但它似乎不喜欢那样并崩溃了。我是否应该尝试将值从 activity 传递到地图片段,如果是这样我应该怎么做?
提前致谢
当您在 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_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>
希望对您有所帮助!