我的应用程序代码中的情况非常奇怪,也许有人可以帮我解决这个问题。问题在于Google Map包含在其中。由于规范,我有两个不同的地图实现:
ActionBarActivity
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"
的选项,且根本没有变化。
我认为这是我能说的一切。希望,有人可以帮助我。
答案 0 :(得分:0)
尝试使用以下代码行获取地图:
SupportMapFragment smf = (SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
如果您使用的是SupportMapFragment
,那么您需要使用SupportFragmentManager
来获取它。