4

我想SupportMapFragmentFragment容器中加载一个。我没有收到任何错误,我的 API 密钥很好,Google Play 服务库已导入并调用了所有权限。

我这样称呼MapFragment

MapaFragment fragment = new MapaFragment();
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.replace(android.R.id.tabcontent, fragment)          
    .commit();

Fragment如下:

public class MapaFragment extends SupportMapFragment {
private View v;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    v=inflater.inflate(R.layout.mapa, null);

    return v;       
}

地图的布局就这么简单:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapa"    
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"/>
4

2 回答 2

1

您已经在xml布局文件中添加了SupportMapFragment,无需在代码中再次添加或覆盖onCreateView方法,只需将这些注释掉即可

MapaFragment fragment = new MapaFragment();
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.replace(android.R.id.tabcontent, fragment)          
    .commit();

还有这些

private View v;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    v=inflater.inflate(R.layout.mapa, null);

    return v;       
}

代码行并尝试运行应用程序

于 2013-03-25T13:58:58.583 回答
-1

你确定,你的 API 密钥没问题吗?请尝试使用此功能检查您的活动的 onCreate 方法:

 private void getShaKey() {

 try {
 PackageInfo info = getPackageManager().getPackageInfo("YOUR_PACKAGE_NAME",
 PackageManager.GET_SIGNATURES);
 for (Signature signature : info.signatures) {
 MessageDigest md = MessageDigest.getInstance("SHA");
 md.update(signature.toByteArray());
 Log.v(TAG, "KeyHash:" + Base64.encodeToString(md.digest(),
 Base64.DEFAULT));
 }
 } catch (NameNotFoundException e) {
 e.printStackTrace();
 } catch (NoSuchAlgorithmException e) {
 e.printStackTrace();
 }

 }

看看,如果它返回与您放入清单中的相同:

 <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="YOUR_API_KEY" />

然后请检查,如果 getMap() 没有像这样返回 null:

GoogleMap myMap;

myMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.mapa)).getMap();

if(myMap != null){
...
}

您可以在“return v”语句之前的 onCreateView 方法中执行此操作。

于 2013-03-25T12:16:19.137 回答