2011-02-04 1 views
0

Je veux utiliser un bouton pour passer les paramètres de sélection à une autre classe qui va construire un écran de carte en utilisant les paramètres transmis. Je suis concentré sur le fonctionnement de mon bouton. Je l'aide un onCLickListener et onCLickView comme suiten utilisant onClickView pour appeler une autre classe

Class1: 

public class Class1 extends Activity implements OnClickListener { 

    Class2 class2; 

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

.......... 

     Button button = (Button)findViewById(R.id.btn_configup1); 
     button.setOnClickListener(this);   
    } 

    public void onClick(View v) { 
     Class2 class2 = new Class2(); 
     //Save state.. selections and params and use bundle 
     //to pass into class2 
     class2.execMapBuild(); 

    }  


} 


Class2: 

Classe2 public class étend MapActivity {

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.drawable.navup); 
} 


public void execMapBuild() {  
     finish(); //just in case we return. 
     Intent intent = new Intent(CLass2.this, Class2.class); 
     startActivity(intent); 

    } 

J'ai tout fonctionne, sauf l'action du bouton désiré. Je veux que le bouton clique dans Class1.onVlickView pour appeler Class2.execMapBuild en utilisant l'action de clic sur le bouton. J'ai le clic sur le bouton capturant l'action et appelant la méthode execMapBuild sur Class2. Mais j'obtiens une exception NullPointerException lorsqu'elle passe de startActivity (intention) à onCreate.

J'ai essayé plusieurs autres façons de clouer cela, mais cela semble le meilleur et je semble proche de le découvrir. J'apprécierais vraiment une explication de ce que je peux manquer. Code ajouté qui n'a pas été copié initialement.

Répondre

2

Pour étendre la réponse de @Heiko Rupp, si vous voulez Class2 pour afficher une carte, il faut étendre quelque chose comme Activity. En tant que tel, vous ne pouvez pas simplement l'appeler avec une méthode normale. Vous devez enregistrer le Activity dans votre manifeste, puis l'appeler en utilisant un Intent. Voici un exemple du genre de chose que vous devez faire:

public class Class1 extends Activity implements OnClickListener { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
     Button button = (Button)findViewById(R.id.btn_configup1); 
     button.setOnClickListener(this);   
    } 

    public void onClick(View v) { 
     Intent intent = new Intent(Class1.this,Class2.class); 
     intent.putExtra("key","data"); 
     ... 
     startActivity(intent); 
    } 
} 

public class Class2 extends MapActivity { 

    String mData; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      mData = extras.getString("key"); 
      ... 
     } 
     ... 
    } 
} 

Puis-je suggérer que vous utilisez des noms de classes plus descriptives que Class1 et Class2.

+0

C'est ma faute en copiant le code dans la fenêtre ici. Class2 étend MapActivity dans mon code actuel. – apesa

+0

Le même principe s'applique, vous ne pouvez pas l'instancier directement en utilisant le mot clé 'new', et vous ne pouvez pas appeler directement ses méthodes. Vous devez créer un Intent et appeler startActivity(). –

+0

En fait, Class2 étend MapActivity. J'ai substitué Class1 et Class2 pour le rendre plus propre dans la question. Je veux vraiment savoir quelle serait la meilleure façon de faire de Class1.onClickView en Class2.execMapBuild. Dans execMapBuiold, je vais créer les données pour mon ItemizedOverlay. Une fois terminé, je veux passer à onCreate. J'espère que je ne dérange personne. – apesa

2

Class2 Aucune activité, donc les rappels d'une activité ne seront pas appelés par le système.

Et s'il s'agissait d'un Activity, vous ne pouviez pas l'appeler via new Class2(), car les rappels ne sont toujours pas exécutés. Essayez de nettoyer cela puis lancez l'activité Class2 de Class1 avec Intent comme vous le faites en execMapBuild().

+0

Je vais essayer ça. Je vois ce que tu veux dire. Je peux tout suivre dans execBuildMap mais après l'intention de startActivity() il excepte avec une exception NUllPointerException – apesa

+0

Merci beaucoup. – apesa

Questions connexes