ANDROID - 如何在抽屉菜单中使用谷歌地图?

Posted

技术标签:

【中文标题】ANDROID - 如何在抽屉菜单中使用谷歌地图?【英文标题】:ANDROID - How to use google maps in drawer menu? 【发布时间】:2021-09-11 14:25:57 【问题描述】:

我想这样做是为了在地图上显示一个点,但这可能并不容易,因为我正在使用带有片段的抽屉菜单,因此 java 文件被拆分。

在第 35 行我有错误 Cannot resolve method 'getSupportFragmentManager' in 'MapFragment'

在第 38 行我有另一个错误Method 'onMapReady(com.google.android.gms.maps.GoogleMap)' is never used

MapFragment.java

public class MapFragment extends Fragment 
    GoogleMap gMap;

    @Nullable
    @org.jetbrains.annotations.Nullable
    @Override
    public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) 
        return inflater.inflate(R.layout.fragment_map, container, false);
    
    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) 
        super.onViewCreated(view, savedInstanceState);
        SupportMapFragment supportMapFragment = (SupportMapFragment)
                getSupportFragmentManager().findFragmentById(R.id.google_map);
        supportMapFragment.getMapAsync((OnMapReadyCallback) this);
    
    public void onMapReady(GoogleMap googleMap)
        gMap = googleMap;
        gMap.setOnMapClickListener(latLng -> 
            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            markerOptions.title("Here");
            gMap.clear();
            gMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,10));
            gMap.addMarker(markerOptions);
        );
    

fragment_map.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MapActivity">

    <fragment
        android:id="@+id/google_map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_
        android:layout_ />

</RelativeLayout>

【问题讨论】:

【参考方案1】:

使用 getChildFragmentManager() 代替 getSupportFragmentManager()。

SupportMapFragment supportMapFragment = (SupportMapFragment)
            getChildFragmentManager().findFragmentById(R.id.google_map);

"Method 'onMapReady(com.google.android.gms.maps.GoogleMap)' is never used" ,你得到这个错误是因为你实际上没有覆盖原来的onMapReady()函数。所以Android工作室会认为这个函数concreate 方法。所以从 OnMapReadyCallBack 实现您的片段。

  public class MapFragment extends Fragment implements OnMapReadyCallback
     supportMapFragment.getMapAsync(this);

【讨论】:

以上是关于ANDROID - 如何在抽屉菜单中使用谷歌地图?的主要内容,如果未能解决你的问题,请参考以下文章

导航抽屉中的谷歌地图 - 空指针异常,哪个是正确的片段?

片段中的 Android 谷歌地图

如何在导航抽屉中显示菜单类别的菜单图标?

Android:在drawerlayout中使用地图膨胀片段时出错

Android - 带有抽屉菜单的活动标题

当导航抽屉滑动任意量时隐藏操作栏菜单项