2010-11-17 22 views
4

Je veux donc une intention de démarrer une activité qui affiche simplement une boîte de dialogue contextuelle indiquant à l'utilisateur comment utiliser l'application.Création d'une intention dans une nouvelle méthode

J'ai le code:

private final View.OnClickListener btnClick = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.about_box: 
      Intent i = new Intent(this, About.class); 
      startActivity(i); 
      break; 
     } 
    } 
} 

mais l'intention est de me donner l'erreur:

The constructor Intent(new View.OnClickListener(){}, Class) is undefined

Toute idée sur des solutions de contournement?

Merci.

+0

Vous voudrez peut-être changer la réponse marquée, "blindstuff" a une bien meilleure réponse. – WORMSS

Répondre

2

Le problème est que vous êtes dans une autre classe là-bas et passez l'intention d'un contexte mauvais. Vous devez passer le bon contexte. Jetez un oeil à l'exemple ci-dessous.

// your Activity 

public class MyActivity extends Activity { 

    Context ctx = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ctx = getApplication(); 
    } 

    private final View.OnClickListener btnClick = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      switch (v.getId()) { 
      case R.id.about_box: 

       Intent i = new Intent(ctx, About.class); 
       startActivity(i); 
       break; 
      } 
     } 
    } 
10

Changement,

Intent i = new Intent(this, About.class); 

à,

Intent i = new Intent(TheCurrentClassName.this, About.class); 
+0

aveugle est juste; le problème est que le "ceci" que vous avez spécifié est le mauvais. Vous voulez le "ceci" de la classe parente, pas le "ceci" de la classe interne. – Emmanuel

+0

Exactement, merci d'expliquer davantage. – blindstuff

1

Changer la ligne intention de: Intention intention = new intention (ClassName.this, theNewClassName.class);

1

L'intention a besoin d'un contexte. Toutefois, l'utilisation de ce raccourci dans la fonction onClick n'est pas résolue correctement. Différentes façons de fournir le contexte actuel dans une classe interne anonyme sont - Utilisez Context.this à la place de ceci. - Utilisez getApplicationContext() au lieu de cela. - Utilisez explicitement le nom de classe MenuScreen.this. Appelez une fonction déclarée au bon niveau de contexte.

1

il suffit de changer

Intent i = new Intent(this, About.class); 

à

Intent i = new Intent(Classname.this, About.class); 

espérons que cela fonctionne.