0

J'ai un onglet CUSTOM qui utilise la méthode addTab() au lieu de tabspec. un de mes onglets dans un MapView qui montre un emplacement spécifique. Le problème que je rencontre est une exception sur la ligne dans mon tabhost qui configure l'onglet mapview.MapActivity dans TabHost

Activité Tab (paquet pour des raisons de confidentialité supprimé):

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

Il y a aussi une superposition, mais ce n'est pas nécessaire pour cette question. Ma question est, je suis assez sûr que j'ai besoin de créer une activité parent qui gère l'activité de la carte, mais je ne sais pas comment le faire.

Répondre

0

Je sais que l'activité dans TabHost n'est pas considérée comme une activité. Je pense qu'il est géré comme View.
Dans mon cas, l'activité principale a été héritée Activity et TabHost a été implémenté via la configuration xml. Puis j'ai ajouté MapActivity - en tant que TabSpec- à TabHost, mais MapView affiche uniquement l'arrière-plan gris.
Donc, je fais que l'activité principale hérite de MapActivity, et cela a fonctionné.
Je ne sais pas si c'est la meilleure solution, si votre activité principale doit hériter de TabActivity, mais s'il n'y a pas de raison évidente, je pense qu'il est préférable d'hériter de MapActivity plutôt que de TabActivity.
Peut-être que ma réponse n'est pas la meilleure, j'aimerais pouvoir vous aider d'une manière ou d'une autre.
Bonne chance!

0

TabActivity m'a causé beaucoup de problèmes dans le passé. Cela pourrait être un autre problème lié à cela.

Actuellement, TabActivity est déprécié. Le document dit:

Les nouvelles applications devraient utiliser des fragments à la place de cette classe; à continuer à fonctionner sur les périphériques plus anciens, vous pouvez utiliser la bibliothèque de support v4 qui fournit une version de l'API de fragmentation qui est compatible vers DONUT.

Pour utiliser un MapView dans un Fragment vous devez utiliser: petedoyle de android-support-v4-googlemaps.