Android TabHost中的mappactivity

Android TabHost中的mappactivity,android,google-maps,android-mapview,parent-child,android-tabhost,Android,Google Maps,Android Mapview,Parent Child,Android Tabhost,我有一个自定义选项卡主机,它使用addTab()方法而不是tabspec。地图视图中显示特定位置的“我的”选项卡之一。我遇到的问题是,在设置“地图视图”选项卡的tabhost行中出现异常 选项卡活动(出于保密原因删除了包): 导入android.app.TabActivity; 导入android.content.Intent; 导入android.os.Bundle; 导入android.view.LayoutInflater; 导入android.view.view; 导入android.w

我有一个自定义选项卡主机,它使用addTab()方法而不是tabspec。地图视图中显示特定位置的“我的”选项卡之一。我遇到的问题是,在设置“地图视图”选项卡的tabhost行中出现异常

选项卡活动(出于保密原因删除了包):

导入android.app.TabActivity;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.widget.ImageView;
导入android.widget.TabHost;
导入android.widget.TextView;
公共类CustomTabHost扩展了TabActivity{
/**在首次创建活动时调用*/
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.tabhost);
setTabs();
}
私有void setTabs()
{
addTab(“服务”,R.drawable.servicesicon,Services.class);
addTab(“我们的作品”,R.drawable.ourworkicon,ourwork.class);
addTab(“RSS”,R.drawable.rssicon,RSSReader.class);
addTab(“Locate IML”,R.drawable.locateicon,Locate.class);
addTab(“Contact IML”,R.drawable.contacticon,ContactUs.class);
}
私有void addTab(字符串labelId,int-drawableId,c类)
{
TabHost TabHost=getTabHost();
意向=新意向(本,c);
TabHost.TabSpec spec=TabHost.newTabSpec(“tab”+labelId);
查看tabIndicator=LayoutInflater.from(this).充气(R.layout.tabs_bg,getTabWidget(),false);
TextView title=(TextView)tabIndicator.findViewById(R.id.title1);
标题:setText(labelId);
ImageView图标=(ImageView)选项卡indicator.findViewById(R.id.icon1);
icon.setImageResource(drawableId);
规格设置指示器(tabIndicator);
规格设置内容(意图);
tabHost.addTab(spec);
}
}
地图活动:

import java.util.List;

import android.graphics.drawable.Drawable;
import android.os.Bundle;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class Locate extends MapActivity  { 


   @Override 
   protected void onCreate(Bundle icicle) { 
           super.onCreate(icicle); 
            setContentView(R.layout.locateiml); 


 MapView mapview = (MapView) findViewById(R.id.locatemap);
 mapview.setBuiltInZoomControls(true);

  List<Overlay> mapOverlays = mapview.getOverlays();
  Drawable drawable =this.getResources().getDrawable(R.drawable.locateicon);
  Locateoverlay itemoverlay = new Locateoverlay(drawable, this);
  GeoPoint point = new GeoPoint(382571066,-85751392);
  OverlayItem overlayitem = new OverlayItem(point, "Interactive", null);

 itemoverlay.addOverlay(overlayitem);

 mapOverlays.add(itemoverlay);
}
 protected boolean isRouteDisplayed()
 {
return false;
}
 }
import java.util.List;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入com.google.android.maps.GeoPoint;
导入com.google.android.maps.MapActivity;
导入com.google.android.maps.MapView;
导入com.google.android.maps.Overlay;
导入com.google.android.maps.OverlayItem;
公共类定位扩展MapActivity{
@凌驾
创建时受保护的空(束冰柱){
超级冰柱;
setContentView(R.layout.locateiml);
MapView MapView=(MapView)findViewById(R.id.locatemap);
mapview.SetBuilTinZoomControl(真);
List mapOverlays=mapview.getOverlays();
Drawable Drawable=this.getResources().getDrawable(R.Drawable.locateicon);
Locateoverlay itemoverlay=新的Locateoverlay(可绘制,此);
地质点=新的地质点(382571066,-85751392);
OverlayItem OverlayItem=新的OverlayItem(点,“交互”,空);
itemoverlay.addOverlay(overlayitem);
添加(ItemOverlays);
}
受保护的布尔值isRouteDisplayed()
{
返回false;
}
}

还有一个覆盖,但这个问题不需要覆盖。我的问题是,我非常确定我需要创建一个父活动来处理映射活动,但我不知道如何做。

我知道TabHost中的活动不被视为活动。我认为它是作为视图管理的。
在我的例子中,主要活动是继承的活动,而TabHost是通过xml配置实现的。然后,我将MapActivity(作为TabSpec)添加到TabHost,但MapView只显示灰色背景。
因此,我让主活动继承MapActivity,它就工作了。

我不知道这是否是最好的解决方案,您的主要活动是否必须继承TabActivity,但如果没有明显的原因,我认为继承MapActivity比继承TabActivity更好。
也许我的答案不是最好的,我希望我能在某些方面帮助您。
祝您好运

TabActivity
过去给我带来了很多问题。这可能是与此相关的另一个问题

现在
TabActivity
已被弃用。医生说:

新的应用程序应该使用片段而不是这个类;到 如果继续在旧设备上运行,则可以使用v4支持库 它提供了一个兼容的片段API版本 吃甜甜圈

要在
片段中使用
地图视图
,您需要使用:petedoyle's

import java.util.List;

import android.graphics.drawable.Drawable;
import android.os.Bundle;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class Locate extends MapActivity  { 


   @Override 
   protected void onCreate(Bundle icicle) { 
           super.onCreate(icicle); 
            setContentView(R.layout.locateiml); 


 MapView mapview = (MapView) findViewById(R.id.locatemap);
 mapview.setBuiltInZoomControls(true);

  List<Overlay> mapOverlays = mapview.getOverlays();
  Drawable drawable =this.getResources().getDrawable(R.drawable.locateicon);
  Locateoverlay itemoverlay = new Locateoverlay(drawable, this);
  GeoPoint point = new GeoPoint(382571066,-85751392);
  OverlayItem overlayitem = new OverlayItem(point, "Interactive", null);

 itemoverlay.addOverlay(overlayitem);

 mapOverlays.add(itemoverlay);
}
 protected boolean isRouteDisplayed()
 {
return false;
}
 }