我有一个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;
}
}
还有一个叠加层,但这个问题不需要。我的问题是,我很确定我需要创建一个处理地图活动的父活动,但我不知道如何做到这一点。
答案 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。