You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用android.app.Fragment库实现Fragment内的地图功能?

使用android.app.Fragment实现Google Maps功能

我明白你现在想从基于support.fragment的地图实现切换到原生android.app.Fragment库——确实大部分示例都偏向于支持库,但原生实现其实也很直接,只需要做几个关键调整就行:

1. 布局文件调整

把布局里的SupportMapFragment替换成原生的MapFragment,对应的类路径是com.google.android.gms.maps.MapFragment:

<fragment
    android:id="@+id/mapFragment"
    class="com.google.android.gms.maps.MapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2. 实现类代码调整

你的TrackFragment需要继承android.app.Fragment(而非支持库的Fragment),然后通过getFragmentManager()(如果地图Fragment直接在Activity布局中)或者getChildFragmentManager()(如果地图Fragment嵌套在当前Fragment中,需API 17及以上支持)来获取MapFragment实例:

public class TrackFragment extends android.app.Fragment {

    private GoogleMap mMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.your_fragment_layout, container, false);
        
        // 获取MapFragment实例
        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment);
        
        // 异步获取GoogleMap对象,避免阻塞UI
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mMap = googleMap;
                // 在这里完成地图初始化操作,比如设置摄像头位置、添加标记等
                LatLng targetLocation = new LatLng(39.9042, 116.4074);
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(targetLocation, 12));
                mMap.addMarker(new MarkerOptions().position(targetLocation).title("北京"));
            }
        });
        
        return rootView;
    }
}

关键注意点

  • API版本兼容:android.app.Fragment从API 11开始引入,getChildFragmentManager()需要API 17及以上支持,如果你的应用需要兼容更低版本,可能需要额外处理,但目标API在17+的话这个实现完全可用。
  • 依赖配置不变:你仍然需要在项目的build.gradle中引入Google Maps服务依赖,示例如下:
    implementation 'com.google.android.gms:play-services-maps:18.1.0'
    
  • 权限与密钥:别忘了在AndroidManifest.xml中添加必要的位置权限和Maps API密钥:
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <application>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="你的Maps API密钥"/>
    </application>
    

这样调整后,你的原生Fragment就能正常加载并使用Google Maps功能了。

内容的提问来源于stack exchange,提问作者Prabs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:24:01