TabHost中的MapActivity

TabHost中的MapActivity

问题描述:

我有一个CUSTOM标签主机使用addTab()方法而不是tabspec。 MapView中的一个选项卡显示特定的位置。我遇到的问题是设置了mapview选项卡的tabhost中的一个例外。TabHost中的MapActivity

选项卡活动(除去包保密原因):

import android.app.TabActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TabHost; 
import android.widget.TextView; 



public class CustomTabHost extends TabActivity { 
/** Called when the activity is first created. */ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tabhost); 
    setTabs() ; 
} 
private void setTabs() 
{ 
    addTab("Services", R.drawable.servicesicon, services.class); 
    addTab("Our Work", 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); 
} 

private void addTab(String labelId, int drawableId, Class<?> c) 
{ 
    TabHost tabHost = getTabHost(); 
    Intent intent = new Intent(this, c); 
    TabHost.TabSpec spec = tabHost.newTabSpec("tab" + labelId); 

    View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tabs_bg, getTabWidget(), false); 
    TextView title = (TextView) tabIndicator.findViewById(R.id.title1); 
    title.setText(labelId); 
    ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon1); 
    icon.setImageResource(drawableId); 

    spec.setIndicator(tabIndicator); 
    spec.setContent(intent); 
    tabHost.addTab(spec); 
} 

} 

MapActivity:

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; 
} 
} 

也有覆盖,但并不需要这个问题。我的问题是,我非常确定我需要创建一个父活动来处理地图活动,但我不知道如何执行此操作。

我知道TabHost中的活动不被视为活动。我认为它被视为查看。
在我的情况下,主Activity是继承的Activity和TabHost是通过xml配置实现的。然后我将MapActivity作为TabSpec添加到TabHost,但MapView仅显示灰色背景。
所以,我让主Activity继承MapActivity,并且它工作。
我不知道这是否是最好的解决方案,无论您的主Activity是否必须继承TabActivity,但是如果没有明显的原因,我认为最好继承MapActivity而不是TabActivity。
也许我的回答不是最好的,我希望我能以某种方式帮助你。
祝你好运!

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

现在TabActivity已弃用。该文档说:

新应用程序应该使用碎片而不是此类;到 继续在较旧的设备上运行,则可以使用v4支持库 ,该库提供了与DONUT兼容的 兼容的Fragment API版本。

要使用MapViewFragment你需要使用:petedoyle的android-support-v4-googlemaps