TabHost中的MapActivity

时间:2011-11-28 21:32:41

标签: android google-maps android-mapview parent-child android-tabhost

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

Tab Activity(出于保密原因删除了包):

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

还有一个叠加层,但这个问题不需要。我的问题是,我很确定我需要创建一个处理地图活动的父活动,但我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:0)

我知道TabHost中的Activity不被视为Activity。我认为它是作为View管理的 在我的例子中,主Activity是继承的Activity,TabHost是通过xml配置实现的。然后我将MapActivity - 作为TabSpec-添加到TabHost,但MapView仅显示灰色背景。
因此,我使主Activity继承MapActivity,并且它起作用。
我不知道这是否是最佳解决方案,主要的Activity是否必须继承TabActivity,但如果没有明显的原因,我认为继承MapActivity而不是TabActivity会更好。
也许我的答案不是最好的,我希望我能以某种方式帮助你。祝你好运!

答案 1 :(得分:0)

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

现在不推荐使用TabActivity。医生说:

  

新应用程序应使用Fragments而不是此类;至   继续在旧设备上运行,您可以使用v4支持库   它提供了兼容的Fragment API版本   对DONUT。

要在MapView内使用Fragment,您需要使用:petedoyle的android-support-v4-googlemaps