0

我有一個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; 
} 
} 

也有覆蓋,但並不需要這個問題。我的問題是,我非常確定我需要創建一個父活動來處理地圖活動,但我不知道如何執行此操作。

回答

0

我知道TabHost中的活動不被視爲活動。我認爲它被視爲查看。
在我的情況下,主Activity是繼承的Activity和TabHost是通過xml配置實現的。然後我將MapActivity作爲TabSpec添加到TabHost,但MapView僅顯示灰色背景。
所以,我讓主Activity繼承MapActivity,並且它工作。
我不知道這是否是最好的解決方案,無論您的主Activity是否必須繼承TabActivity,但是如果沒有明顯的原因,我認爲最好繼承MapActivity而不是TabActivity。
也許我的回答不是最好的,我希望我能以某種方式幫助你。
祝你好運!

0

TabActivity過去給我造成了很多問題。這可能是與此相關的另一個問題。

現在TabActivity已棄用。該文檔說:

新應用程序應該使用碎片而不是此類;到 繼續在較舊的設備上運行,則可以使用v4支持庫 ,該庫提供了與DONUT兼容的 兼容的Fragment API版本。

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