MapActivity в TabHost - PullRequest
       21

MapActivity в TabHost

0 голосов
/ 29 ноября 2011

У меня есть пользовательский хост вкладок, который использует метод addTab () вместо tabspec.одна из моих вкладок в 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);
}

}

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 голосов
/ 29 ноября 2011

TabActivity вызвал у меня много проблем в прошлом. Это может быть еще одна проблема, связанная с этим.

Сейчас TabActivity устарело. Док говорит:

Новые приложения должны использовать фрагменты вместо этого класса; в продолжить работу на старых устройствах, вы можете использовать библиотеку поддержки v4 которая предоставляет версию API фрагмента, которая совместима вниз до доната.

Чтобы использовать MapView внутри Fragment, вам потребуется: android-support-v4-googlemaps * petedoyle .

0 голосов
/ 29 ноября 2011

Я знаю, что активность в TabHost не рассматривается как активность.Я думаю, что он управляется как View.
В моем случае основное Activity было унаследовано Activity, а TabHost был реализован через конфигурацию xml.Затем я добавил MapActivity - как TabSpec - в TabHost, но MapView показывает только серый фон.
Итак, я делаю основной Activity наследующим MapActivity, и он работал.
Я не знаю, является ли это лучшим решениемваша основная деятельность должна наследовать TabActivity, но если нет очевидной причины, я думаю, что лучше наследовать MapActivity, а не TabActivity.
Возможно, мой ответ не лучший, хотелось бы чем-то помочь вам.
Удачи!

...