2010-11-22 55 views
2

J'ai le bouton ci-dessous déclaré dans mon main.xmlImpossible de lier onClick xml sur une méthode dans mon activité

<Button android:name="@+id/clickedStartService" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:onClick="clickedStartService" 
     android:text="Start" 
     /> 
<Button android:name="@+id/clickedStopService" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:onClick="clickedStopService" 
     android:text="Stop" 
     /> 

Et je les méthodes suivantes dans l'activité ..

@Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
public void clickedStartService(View v) 
    { 
     startService(new Intent(this, LocalService.class)); 
    } 

    public void clickedStopService(View v) 
    { 
     stopService(new Intent(this, LocalService.class)); 
    } 

Je reçois l'erreur suivante lorsque je clique sur le bouton. J'ai essayé de reconstruire le projet dans mon IDE et j'ai également redémarré l'émulateur, mais la même erreur réapparaît. Je l'ai suivi la documentation sur le site Android developers, et je l'ai eu ce travail dans un projet distinct, je ne peux pas le faire travailler ici ..

ERROR/AndroidRuntime(335): FATAL EXCEPTION: main 
     java.lang.IllegalStateException: Could not find a method clickedStartService(View) in the activity class com.jameselsey.observerpattern.MyApp for onClick handler on view class android.widget.Button 
     at android.view.View$1.onClick(View.java:2059) 
     at android.view.View.performClick(View.java:2408) 
     at android.view.View$PerformClick.run(View.java:8816) 
     at android.os.Handler.handleCallback(Handler.java:587) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:4627) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:521) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.NoSuchMethodException 
     at java.lang.Class.getDeclaredMethods(Native Method) 
     at java.lang.ClassCache.getDeclaredPublicMethods(ClassCache.java:166) 
     at java.lang.ClassCache.getDeclaredMethods(ClassCache.java:179) 
     at java.lang.ClassCache.findAllMethods(ClassCache.java:249) 
     at java.lang.ClassCache.getFullListOfMethods(ClassCache.java:223) 
     at java.lang.ClassCache.getAllPublicMethods(ClassCache.java:204) 
     at java.lang.Class.getMethod(Class.java:984) 
     at android.view.View$1.onClick(View.java:2052) 
     ... 11 more 
+1

Et les deux boutons sont "cassé"? Je vais deviner que c'est quelque chose qui va provoquer un visage-paume quand vous le trouvez. "android: onClick" est correctement mis en majuscule, et la signature de la méthode est correcte ... donc rien de plus évident à cet égard. Avez-vous d'autres boutons "Démarrer" dans ce manifeste? Dites dans une autre activité ou vue? Peut-être que les méthodes sont simplement dans la mauvaise classe. –

+2

Peut-être une réponse un peu stupide, mais avez-vous importé le bon cours android.view.View? – Impression

+1

La seule idée - est la méthode 'clickedStartService' dans 'com.jameselsey.observerpattern.MyApp'? –

Répondre

3

XML auditeurs de clic ont été ajoutés dans Android 1.6 . Vérifiez votre AndroidManifest pour vérifier que votre version min SDK n'est pas définie sur cupcake (1.5 ou API niveau 3) -

Si vous utilisez Eclipse avec le plugin ADT, vérifiez également les propriétés du projet> Android et vérifiez la construction cible, assurez-vous que c'est Donut ou supérieur.

3

que vous devez faire:

import android.view.View

au lieu de:

import view.View