以下代码在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有替代品吗?
答案 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();
如果出现任何问题,您也可以使用我在此主题上撰写的博客文章指南:
答案 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/