Android - 片段中的Google Map API v2仅显示黑屏

时间:2013-11-29 17:16:49

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

我的应用程序代码中的情况非常奇怪,也许有人可以帮我解决这个问题。问题在于Google Map包含在其中。由于规范,我有两个不同的地图实现:

  • MapActivity - 扩展ActionBarActivity
  • MapFragment - 扩展Fragment

我正在使用API 10

两种实现都使用相同的map api键和相同的布局。

在MapActivity中一切正常,地图显示且LogCat中没有错误。但是,在MapFragment中,情况完全不同。

我没有地图 - 更确切地说,地图是黑色的,我在左下角有Google徽标和放大/缩小控制器,但没有地图,只有黑屏和LogCat中的错误:

Could not find class 'maps.ae.i', referenced from method maps.af.al.a

这是我的MapFragment源代码中最重要的片段:

public class MapFragment extends Fragment {

    private GoogleMap mMap;

    private static View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (view != null) {
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null)
                parent.removeView(view);
        }
        try {
            view = inflater.inflate(R.layout.activity_map, container, false);
        } catch (InflateException e) {
            /* map is already there, just return view as it is */
        }

        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
        checkGooglePlayServices();
        if (getActivity().getIntent().hasExtra("extra")) {
            setMarkers(getActivity().getIntent());
        } else {
            setMarkers();
        }
    }

    private void setUpMapIfNeeded() {
        if (mMap != null) {
            return;
        }
        mMap = ((SupportMapFragment) getFragmentManager()
                .findFragmentById(R.id.map)).getMap();
        if (mMap == null) {
            return;
        }
        // Initialize map options.
        LatLng startPoz = new LatLng(52.34, 18.9);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(startPoz, 6));
    }

    private void checkGooglePlayServices() {
        int status;
        status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
        if (status != ConnectionResult.SUCCESS) {
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, getActivity(),
                    69);
            dialog.show();
        } else {
            setUpMapIfNeeded();
        }
    }

这是activity_map.xml(再次 - 在MapActivity和MapFragment中使用):

<include
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    layout="@layout/include_map" />

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

添加了额外的视图和导入,因为没有它,抽屉每次都被地图覆盖。

这也不是问题,因为我只用include_ma测试了它,所以改变了

view = inflater.inflate(R.layout.activity_map, container, false);

view = inflater.inflate(R.layout.inlude_map, container, false);

这是include_map.xml的代码:

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

此外,我已选中class="com.google.android.gms.maps.SupportMapFragment"而不是android:name="com.google.android.gms.maps.SupportMapFragment"的选项,且根本没有变化。

我认为这是我能说的一切。希望,有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

尝试使用以下代码行获取地图:

SupportMapFragment smf = (SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map);

如果您使用的是SupportMapFragment,那么您需要使用SupportFragmentManager来获取它。