【问题标题】:MapActivity in TabHostTabHost 中的 MapActivity
【发布时间】:2011-11-28 21:32:41
【问题描述】:

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

标签活动(出于保密原因删除了包):

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

}

地图活动:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      现在TabActivity 已被弃用。医生说:

      新的应用程序应该使用 Fragments 而不是这个类;到 继续在旧设备上运行,可以使用 v4 支持库 它提供了向下兼容的 Fragment API 版本 到甜甜圈。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多