如何从片段中实例化Google Map?

时间:2014-07-16 23:37:37

标签: android android-fragments google-maps-android-api-2

现在地图加载下面的代码,但我希望能够以编程方式与它进行交互(例如,通过调用.setMyLocationEnabled()来设置我的位置)。到目前为止,我所尝试的一切都会导致崩溃。这是从MainActivity管理的片段。

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapFrag extends Fragment {

private GoogleMap map;

public MapFrag(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    return inflater.inflate(R.layout.fragment_map, container, false);
}
}

XML文件:

<FrameLayout 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"
tools:context="***.fragment">

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.google.android.gms.maps.MapFragment"/>

</FrameLayout>

如何在片段中实例化GoogleMap以与其进行交互?

1 个答案:

答案 0 :(得分:1)

我不知道你为什么要在片段中加载片段。嵌套片段非常棘手,只适用于API Level 17+或android-support-v4库中的片段backport。

相反,让您的活动加载MapFragment(如果您正在使用片段backport,则加载SupportMapFragment)。如果您想在该片段中使用更多业务逻辑,则子类MapFragment(如果您正在使用片段backport,则为SupportMapFragment)并让活动加载子类。

如果您有几年的Android经验并且确实想要使用嵌套片段,则需要确定要使用哪些片段实现,并同步它们。现在,您的Java代码有Fragment使用片段backport(android.support.v4.app.Fragment),但您尝试加载MapFragment而不是SupportMapFragment

另外,删除MapFrag构造函数或链到超类构造函数。