Bas*_*rif 27 android google-maps-android-api-2
我有一个片段是Viewpager的一部分,我想在该片段中使用Google Map V2.这是我到目前为止所尝试过的,
在我的片段中,
private SupportMapFragment map;
private GoogleMap mMapView;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getChildFragmentManager();
map = (SupportMapFragment) fm.findFragmentById(R.id.map);
if (map == null) {
map = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map, map).commit();
}
}
@Override
public void onResume() {
super.onResume();
if (mMapView == null) {
mMapView = map.getMap();
Marker hamburg = mMapView.addMarker(new MarkerOptions().position(HAMBURG)
.title("Hamburg"));
Marker kiel = mMapView.addMarker(new MarkerOptions()
.position(KIEL)
.title("Kiel")
.snippet("Kiel is cool")
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher)));
mMapView.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));
// Zoom in, animating the camera.
mMapView.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的布局subfragment_info.xml中,我有,
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tableLayout1" />
Run Code Online (Sandbox Code Playgroud)
我现在可以看到地图了.但标记没有显示.我认为我的Google地图mMapView为空.请帮我解决这个问题.提前致谢.
Dee*_*war 50
为地图创建一个框架,在该框架中将其添加到xml布局中
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map_container">
<!-- The map fragments will go here -->
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
不要在你的片段类中的xml中包含class ="com.google.android.gms.maps.SupportMapFragment".在onActivityCreated中手动获取它
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getChildFragmentManager();
fragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
if (fragment == null) {
fragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map_container, fragment).commit();
}
/***at this time google play services are not initialize so get map and add what ever you want to it in onResume() or onStart() **/
}
@Override
public void onResume() {
super.onResume();
if (map == null) {
map = fragment.getMap();
map.addMarker(new MarkerOptions().position(new LatLng(0, 0)));
}
}
Run Code Online (Sandbox Code Playgroud)
如果你们面临任何问题非法状态异常发生只是写下面的代码
/**此问题已在(Google Bugs)中跟踪*http://code.google.com/p/gmaps-api-issues/issues/detail?id=5064添加*代码因非法状态异常在重新点击时发生tab**为我修复它的短期解决方法是将以下内容添加到您调用的每个Fragment的*onDetach()*/
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class
.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
//如果你想在activity中显示map,只需通过下面的// FragmentActivity编写代码来扩展你的Activity
在onCreate
FragmentManager fm = getSupportFragmentManager();
fragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
if (fragment == null) {
fragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map_container, fragment)
.commit();
}
Run Code Online (Sandbox Code Playgroud)
在onResume
@Override
protected void onResume() {
super.onResume();
if (googleMap == null) {
initilizeMap();
}
}
private void initilizeMap() {
if (googleMap != null) {
googleMap = fragment.getMap();
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setRotateGesturesEnabled(true);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude)).zoom(10).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(
latitude, longitude));
// ROSE color icon
marker.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
// adding marker
googleMap.addMarker(marker);
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以从这些链接获取其他帮助
https://code.google.com/p/gmaps-api-issues/issues/detail?id=5064#c1
https://developers.google.com/maps/documentation/android/地图
Mac*_*ski 12
您必须决定是在代码中创建片段new SupportMapFragment()
还是从xml中扩充class="com.google.android.gms.maps.SupportMapFragment"
.
实际上你不能Fragment
用另一个xml Fragment
.阅读有关嵌套Fragment
的内容.
您可以按照此评论关于如何添加嵌套SupportMapFragment
.
我或多或少有同样的问题.我有一个导航抽屉,我想把地图放在一个片段中.
我跟着这个帖子(但是用西班牙语):https: //groups.google.com/forum/#!msg/desarrolladores-android/1cvqPm0EZZU/Q801Yvb2ntYJ
线索是(在我看来)更改layout.xml文件:您需要更改为以下内容而不是"layout subfragment_info.xml"中的"片段":
<com.google.android.gms.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />`
Run Code Online (Sandbox Code Playgroud)
这是线程内的代码(你可以使用它并适应):https: //groups.google.com/d/msg/desarrolladores-android/1cvqPm0EZZU/9srw_9feamUJ
归档时间: |
|
查看次数: |
44641 次 |
最近记录: |