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版本。
要使用MapView
内Fragment
你需要使用:petedoyle的android-support-v4-googlemaps。