GoogleMap在2.3.7 android上崩溃

时间:2014-02-28 11:28:24

标签: android

以下代码在2.3.7中崩溃,但它不会在api 19中崩溃。 这是Java代码

public class MainActivity extends FragmentActivity implements OnClickListener {
    Button normal, satellite, terrain, hybrid, none;
    private GoogleMap gMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initiator();
    }

    private void initiator() {
        // TODO Auto-generated method stub
        gMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                .getMap();
        normal = (Button) findViewById(R.id.normalmap);
        hybrid = (Button) findViewById(R.id.hybridmap);
        terrain = (Button) findViewById(R.id.terrainmap);
        satellite = (Button) findViewById(R.id.satellitemap);
        none = (Button) findViewById(R.id.nonemap);
        normal.setOnClickListener(this);
        hybrid.setOnClickListener(this);
        terrain.setOnClickListener(this);
        satellite.setOnClickListener(this);
        none.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.normalmap:
            gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            break;
        case R.id.hybridmap:
            gMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            break;
        case R.id.terrainmap:
            gMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
            break;
        case R.id.satellitemap:
            gMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
            break;
        case R.id.nonemap:
            gMap.setMapType(GoogleMap.MAP_TYPE_NONE);
            break;
        }
    }
}

这是xml的代码。如果我将“com.google.android.gms.maps.MapFragment”更改为“com.google.android.gms.maps.SupportMapFragment”,那么它将在api 19级模拟器上崩溃。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="10" >

        <Button
            android:id="@+id/normalmap"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Normal"
            android:layout_weight="2" />

        <Button
            android:id="@+id/hybridmap"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Hybrid"
            android:layout_weight="2" />

        <Button
            android:id="@+id/satellitemap"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Satellite"
            android:layout_weight="2" />

        <Button
            android:id="@+id/terrainmap"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Terrain"
            android:layout_weight="2" />

        <Button
            android:id="@+id/nonemap"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="None"
            android:layout_weight="2" />
    </LinearLayout>

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

</LinearLayout>

2.3.7有替代品吗?

3 个答案:

答案 0 :(得分:2)

您需要提交以下更改:

更改布局中的地图对象:

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

对此:

 <fragment
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

如上所述,在代码中使用SupportMapFragment代替MapFragment对象,使用:

gMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

如果出现任何问题,您也可以使用我在此主题上撰写的博客文章指南:

Google Maps API V2

答案 1 :(得分:0)

可能是因为您没有使用SupportMapFragment。尝试将您的代码更改为:

 gMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

要使用SupportMapFragment,您需要包含support-v4库。更多信息:http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html

答案 2 :(得分:0)

您需要在XML和活动代码中使用SupportMapFragment才能使用它。您可以在网上找到大量的例子。

请检查此链接,例如:

http://www.truiton.com/2013/05/android-supportmapfragment-example/