Question

Je souhaite utiliser un bouton cliquer pour passer les paramètres de sélection à une autre classe qui créera un écran de carte à l'aide des paramètres passés. Je me concentre sur le fonctionnement de mon action de bouton. I US Utilisation OnClickListener et OnClickView comme suit

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:

Classe publique Classe2 é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 souhaité. Je veux que le bouton clique dans class1.onvlickView pour appeler Class2.execmapBuild en utilisant l'action de clic du bouton. J'ai le bouton CLICT Capturant l'action et appelez la méthode ExecMapBuild sur Class2. Mais je reçois une nulpointerException car elle passe de la startActivity (intention) dans onCreate.

J'ai essayé plusieurs autres façons de clouer cela, mais cela semble le meilleur et je semble presque le comprendre. J'apprécierais vraiment une explication de ce que je manque. Ajout du code qui n'était initialement pas copié.

Était-ce utile?

La solution

Pour développer la réponse de @Heiko Rupp, si vous voulez Class2 Pour afficher une carte, il doit é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 appelez-le en utilisant un Intent. Voici un échantillon du genre de chose que vous devriez 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 également vous suggérer d'utiliser plus de noms de classe descriptifs que Class1 et Class2.

Autres conseils

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

Et si c'était un Activity, vous ne pouviez pas simplement l'appeler via new Class2(), comme les rappels ne sont pas exécutés.

Essayez de nettoyer cela, puis de démarrer l'activité de classe 2 de la classe1 avec un Intent Comme vous faites à l'intérieur execMapBuild().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top