2010-05-30 8 views
0

Tout d'abord, cela s'est avéré être un long post alors s'il vous plaît supporter avec moi car ce n'est pas trop difficile, mais vous devrez peut-être clarifier quelque chose avec moi si je ne l'ai pas expliqué correctement. Donc avec un peu d'aide l'autre jour des gars sur ce forum, j'ai réussi à configurer partiellement ma classe 'mapClass', mais j'ai des problèmes avec elle et son fonctionnement ne fonctionne pas correctement, donc je voudrais de l'aide si possible. Je vais poster le code ci-dessous afin que vous puissiez voir.Android: qui peut m'aider avec la mise en place de ce cours Google Maps s'il vous plaît?

Ce que j'ai obtenu est une classe 'Dundrum' qui configure la liste pour un tableau d'éléments. Puis j'ai une classe 'dundrumSelector' que j'utilise pour configurer les méthodes setOnClickListener() sur les listItems et les lier à leurs vues correctes.

CECI EST MON CLASSE SELECTOR DUNDDRUM ....

public static final int BUTTON1 = R.id.anandaAddressButton; 
public static final int BUTTON2 = R.id.bramblesCafeAddressButton; 
public static final int BUTTON3 = R.id.brannigansAddressButton; 

onCreate public void (Bundle savedInstanceState) { super.onCreate (savedInstanceState);

int position = getIntent().getExtras().getInt("position"); 

    if(position == 0){ 
     setContentView(R.layout.ananda); 
    }; 
    if(position == 1){ 
     setContentView(R.layout.bramblescafe); 
    }; 
    if(position == 2){ 
     setContentView(R.layout.brannigans); 
Button anandabutton = (Button) findViewById(R.id.anandaAddressButton); 
anandabutton.setOnClickListener(new View.OnClickListener() { 
public void onClick(View view) { 
     Intent myIntent = new Intent(view.getContext(),MapClass.class); 
     myIntent.putExtra("button", BUTTON1); 
     startActivityForResult(myIntent,0); 

    } 

}); 

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton); 
bramblesbutton.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View view) { 
     Intent myIntent = new Intent(view.getContext(),MapClass.class); 
     myIntent.putExtra("button", BUTTON2); 
     startActivityForResult(myIntent, 0); 
    } 

}); 

etc etc ....

Alors ce que je n'étais mis en place ints statique pour représenter les touches que vous pouvez voir en haut de cette classe, la raison de ceci est parce que dans mon activité mapClass je veux juste avoir une méthode, parce que la seule chose qui varie est les coordonnées à chaque endroit. ie. Je ne veux pas avoir plus de 100 classes de map faisant essentiellement la même chose à part des coordonnées différentes dans la méthode.

donc ma classe carte est la suivante ...

case DundrumSelector.BUTTON1: 
     handleCoordinates("53.288719","-6.241179"); 
     break; 
    case DundrumSelector.BUTTON2: 
     handleCoordinates("53.288719","-6.241179"); 
     break; 
    case DundrumSelector.BUTTON3: 
     handleCoordinates("53.288719","-6.241179"); 
     break; 
    } 
} 




private void handleCoordinates(String l, String b){ 


    mapView = (MapView) findViewById(R.id.mapView); 
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); 
    View zoomView = mapView.getZoomControls(); 

    zoomLayout.addView(zoomView, 
      new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT)); 
     mapView.displayZoomControls(true); 

    mc = mapView.getController(); 
    String coordinates[] = {l, b}; 
    double lat = Double.parseDouble(coordinates[0]); 
    double lng = Double.parseDouble(coordinates[1]); 

    p = new GeoPoint(
      (int) (lat*1E6), 
      (int) (lng*1E6)); 

    mc.animateTo(p); 
    mc.setZoom(17); 
    mapView.invalidate(); 


} 

Maintenant, c'est là mon problème. Les événements onClick() ne fonctionnent même pas à partir de listView pour entrer dans les vues correctes. Je dois commenter les méthodes dans 'DundrumSelector' avant de pouvoir entrer dans leurs points de vue.

Et c'est ce que je ne comprends pas, d'abord pourquoi les événements onClick() ne fonctionneront pas, parce que ce n'est même pas sur la prochaine vue où la carte est.

Je sais que c'est un très long post et il pourrait être assez déroutant alors laissez-moi savoir si vous voulez des précisions ..

Pour récapituler, ce que je suis en train de faire est de faire une seule classe met en place les coordonnées de la carte, comme ce que j'essaie de faire dans ma 'mapClass'.

S'il vous plaît quelqu'un peut aider ou suggérer une autre façon de le faire! Merci à tous pour avoir lu ceci.

+0

pourrait vous envoyer toute la classe? ou mieux définir quel code est dans quelle classe? En outre, ce qui ne fonctionne pas exactement? la méthode onClick() n'est jamais appelée? et que faites-vous pour le faire fonctionner? commenter DrumDrumSelector ?? Que voulez-vous dire par commentaire? le code de la classe entière? – RoflcoptrException

+0

Hey Sebi, Donc, ce qui se passe, c'est que je ne suis pas en mesure de cliquer sur des éléments de la liste si j'ai le onClickListeners() codé dans la classe. Il vient juste avec une erreur disant "le programme a planté etc .." Donc je dois commenter (//) les onClickListeners que je définis pour chaque bouton et cela résout le problème. Pour une raison quelconque, il ne les aime pas là-bas? Mais j'ai besoin de ces méthodes afin que je puisse utiliser ma mapClass .. Ce sont les boutons dans chaque vue qui, lorsqu'on clique dessus, m'amènent à un mapView. Désolé si je suis mauvais à expliquer, vous me comprenez? Faites-moi savoir si vous avez besoin de plus d'infos. TY – Capsud

Répondre

0

Le problème ist suivantes: méthode

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton); 
bramblesbutton.setOnClickListener(new View.OnClickListener() { 

Vous essayez de définir la onClickListener à un bouton qui est disponible uniquement si vous êtes en position 2 et ont appelé la setContentView correcte().Si vous avez un autre Afficher en contenu (qui ne contient pas le bouton) puis

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton); 

retournera nulle et dans la ligne suivante il y a un NullPointerException. Vous devez donc ajouter ce onClickListener uniquement si vous utilisez également la disposition correspondante.

Et oui cela fonctionne si vous le commentez, car alors vous n'essayez pas d'appeler une méthode sur null. Mais d'un autre côté, si vous le commentez, alors il ne va pas enregistrer vos clics et donc ne pas continuer.

Pour le rendre encore plus claire:

lorsque votre position de passage 0, vous définissez ce ContentView:

if(position == 0){ 
     setContentView(R.layout.ananda); 
    }; 

donc je suppose que les deux autres boutons ne seront pas dans cette mise en page anada donc en leur affectant un ClickListener, vous lancerez une exception NullPointerException.

Pour résoudre ce problème et si vous avez vraiment besoin ces 3 dispositions différentes, je le ferais de cette façon (par exemple pour le premier bouton):

if(position == 0){ 
     setContentView(R.layout.ananda); 
     Button anandabutton = (Button) findViewById(R.id.anandaAddressButton); 
     anandabutton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Intent myIntent = new Intent(view.getContext(),MapClass.class); 
       myIntent.putExtra("button", BUTTON1); 
       startActivityForResult(myIntent,0); 
      } 
     }); 
} 
+0

le problème est quoi? – Capsud

+0

sry. eu quelques problèmes avec le mélange de commentaire et de réponse et d'édition .. sry ne sais pas ce qui s'est passé;) –

+0

ah ok ok je vois. Bon alors, avec quelle opinion d'expert dois-je passer? merci de clarifier l'erreur :) – Capsud