Android 如何在片段中创建地图视图
我收到这个错误:Android 如何在片段中创建地图视图,android,exception,android-fragments,android-mapview,Android,Exception,Android Fragments,Android Mapview,我收到这个错误: android.view.InflateException: Binary XML file line #13: Error inflating class com.google.android.maps.MapView 这是我的MapView课程 public class MapViewActivity extends BaseFragment { private TextView mTvTitle; private View mView; /*mapview membe
android.view.InflateException: Binary XML file line #13: Error inflating class com.google.android.maps.MapView
这是我的MapView课程
public class MapViewActivity extends BaseFragment {
private TextView mTvTitle;
private View mView;
/*mapview members*/
private MapView mMapView;
private MapController mapController;
private LocationManager locationManager;
private MyLocationOverlay myLocationOverlay;
private static final int DEFAULT_ZOOM = 14;
private GeoUpdateHandler locationListener = new GeoUpdateHandler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
myLocationOverlay.enableMyLocation();
myLocationOverlay.enableCompass();
}
@Override
public void onPause() {
super.onPause();
locationManager.removeUpdates(locationListener);
myLocationOverlay.disableMyLocation();
myLocationOverlay.disableCompass();
}
@Override
public void onDestroy() {
super.onDestroy();
myLocationOverlay.disableMyLocation();
myLocationOverlay.disableCompass();
}
@SuppressWarnings("unchecked")
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.map_activity, container, false);
mTvTitle = (TextView) mView.findViewById(R.id.tvTitle);
mTvTitle.setText(getResources().getString(R.string.top_tab_around));
mMapView = (MapView) mView.findViewById(R.id.mvMapAroundMe);
BindMap();
return mView;
}
private void BindMap() {
mMapView.preLoad();
mMapView.setBuiltInZoomControls(true);
mMapView.setSatellite(false);
mapController = mMapView.getController();
mapController.setZoom(14); // Zoom 1 is world view
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
myLocationOverlay = new MyLocationOverlay(getActivity(), mMapView);
mMapView.getOverlays().add(myLocationOverlay);
Drawable drawable = this.getResources().getDrawable(R.drawable.pin);
List<Overlay> mapOverlays = mMapView.getOverlays();
MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable, getActivity());
OverlayItem oItem = new OverlayItem(GeopointFactory(33.446886, -86.057426), "title", "title2");
itemizedoverlay.addOverlay(oItem);
mapOverlays.add(itemizedoverlay);
mapOverlays.add(itemizedoverlay);
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
animateToPlaceOnMap ( GeopointFactory(33.446886, -86.057426) );
}
});
}
public class GeoUpdateHandler implements LocationListener {
@Override
public void onLocationChanged(Location location) {
mapController.animateTo( GeopointFactory(location.getLatitude(), location.getLongitude()));
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
private class MyItemizedOverlay extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
Context mContext;
public MyItemizedOverlay(Drawable marker) {
super(boundCenterBottom(marker));
}
public MyItemizedOverlay(Drawable marker, Context context) {
super(boundCenterBottom(marker));
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
@Override
protected boolean onTap(int index) {
final int tempIndex = index;
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.setPositiveButton("פרטים",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
dialog.show();
return true;
}
}
private void animateToPlaceOnMap(final GeoPoint geopoint) {
mMapView.post(new Runnable() {
@Override
public void run() {
mMapView.invalidate();
mapController.animateTo(geopoint);
mapController.setZoom(DEFAULT_ZOOM);
}
});
}
private GeoPoint GeopointFactory(double latitude, double longitude) {
int lat = (int) (latitude * 1E6);
int lng = (int) (longitude * 1E6);
return new GeoPoint(lat, lng);
}
公共类MapViewActivity扩展了BaseFragment{
私有文本视图mTvTitle;
私有视图;
/*mapview成员*/
私人地图视图;
专用地图控制器;
私人场所经理场所经理;
私人我的位置我的位置;
私有静态最终int默认值_ZOOM=14;
private GeoUpdateHandler locationListener=new GeoUpdateHandler();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
恢复时公开作废(){
super.onResume();
myLocationOverlay.enableMyLocation();
myLocationOverlay.enableCompass();
}
@凌驾
公共无效暂停(){
super.onPause();
locationManager.RemoveUpdate(locationListener);
myLocationOverlay.disableMyLocation();
myLocationOverlay.disableCompass();
}
@凌驾
公共空间{
super.ondestory();
myLocationOverlay.disableMyLocation();
myLocationOverlay.disableCompass();
}
@抑制警告(“未选中”)
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
mView=充气机。充气(R.layout.map\u活动,容器,假);
mTvTitle=(TextView)mView.findviewbyd(R.id.tvTitle);
mTvTitle.setText(getResources().getString(R.string.top_tab_around));
mMapView=(MapView)mView.findviewbyd(R.id.mvMapAroundMe);
BindMap();
返回mView;
}
私有void BindMap(){
mMapView.preLoad();
mMapView.setBuiltInZoomControls(真);
mMapView.setSatellite(假);
mapController=mMapView.getController();
mapController.setZoom(14);//Zoom 1是世界视图
locationManager=(locationManager)getActivity().getSystemService(Context.LOCATION\u服务);
locationManager.RequestLocationUpdate(locationManager.GPS\提供程序,0,0,locationListener);
myLocationOverlay=新建myLocationOverlay(getActivity(),mMapView);
mMapView.getOverlays().add(myLocationOverlay);
Drawable Drawable=this.getResources().getDrawable(R.Drawable.pin);
List mapOverlays=mMapView.getOverlays();
MyItemizedOverlay itemizedoverlay=新的MyItemizedOverlay(可绘制,getActivity());
OverlayItem oItem=新的OverlayItem(地质点工厂(33.446886,-86.057426),“标题”、“标题2”);
项目化覆盖。添加覆盖(oItem);
添加(itemizedoverlay);
添加(itemizedoverlay);
myLocationOverlay.runOnFirstFix(新的Runnable()文件){
公开募捐{
animateToPlaceOnMap(地质点工厂(33.446886,-86.057426));
}
});
}
公共类GeoUpdateHandler实现LocationListener{
@凌驾
已更改位置上的公共无效(位置){
mapController.animateTo(GeopointFactory(location.getLatitude(),location.getLength());
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
}
@凌驾
public void onStatusChanged(字符串提供程序、int状态、Bundle extra){
}
}
私有类MyItemizeOverlay扩展了ItemizeOverlay{
private ArrayList mOverlays=new ArrayList();
语境;
公共MyItemizedOverlay(可牵引标记){
super(boundCenterBottom(marker));
}
公共MyItemizeOverlay(可绘制标记,上下文){
super(boundCenterBottom(marker));
mContext=上下文;
}
公共void addOverlay(OverlayItem overlay){
添加(覆盖);
填充();
}
@凌驾
受保护的OverlayItem createItem(int i){
返回mOverlays.get(i);
}
@凌驾
公共整数大小(){
返回mOverlays.size();
}
@凌驾
受保护的布尔onTap(整数索引){
最终指数=指数;
OverlayItem item=mOverlays.get(索引);
AlertDialog.Builder dialog=新建AlertDialog.Builder(mContext);
setTitle(item.getTitle());
setMessage(item.getSnippet());
setPositiveButton(“פרטים”,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
}
});
dialog.show();
返回true;
}
}
专用void animateToPlaceOnMap(最终地质点地质点){
mMapView.post(新的Runnable(){
@凌驾
公开募捐{
mMapView.invalidate();
mapController.animateTo(地质点);
mapController.setZoom(默认的缩放);
}
});
}
专用地质点地质点工厂(双纬度、双经度){
int纬度=(int)(纬度*1E6);
int lng=(int)(经度*1E6);
返回新的地质点(纬度、液化天然气);
}
}
这是我的舱单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="il.co.toeat" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application android:label="@string/app_name" android:icon="@drawable/icon" android:name=".views.MainApplication">
<uses-library android:name="com.google.android.maps" />
<activity android:name=".views.SplashActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar" android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".views.ViewportActivity"
android:windowSoftInputMode="adjustPan|adjustResize"
android:label="@string/app_name"
android:configChanges="locale"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
</application>
使用Google Map API,您无法以这种方式完成此操作 从2012年12月起,您可以将MapFragment和SupportMapFragment与Google Map API v2一起使用,更多信息请参见: 编辑 我想你不明白我的意思。您不应该以这样的方式将MapView放入片段中 通常不在简单片段中使用MapView(在新MapFragments之前)。 有一个黑客允许它,你可以在这里阅读 但我认为最好在不需要做任何开销的情况下使用新的MapFragments。。。它们从12月12日开始提供。链接位于上一条消息中
顺便说一句:出现了一个问题,但是有其他错误你不能用谷歌地图API这样做 从2012年12月起,您可以将MapFragment和SupportMapFragment与Google Map API v2一起使用,更多信息请参见: 编辑 我想你不明白我的意思。您不应该以这样的方式将MapView放入片段中 通常不在简单片段中使用MapView(在