2011-07-17 3 views
5

je le schéma suivant:Mono Droid événement onClick pas trouvé

<Button android:id="@+id/MyButton" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/Hello" 
    android:clickable="true" 
    android:onClick="Foo" 
/> 

Et dans mon activité:

[Activity(Label = "LayoutTest", MainLauncher = true, Icon = "@drawable/icon")] 
public class Activity1 : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     SetContentView(Resource.Layout.Main); 
    } 

    public void Foo(View v) 
    { 
     Toast.MakeText(v.Context, "Bar", ToastLength.Long).Show(); 
    } 
} 

Quand je débugger dans l'émulateur se bloque app lorsque je clique MyButton avec l'extrait suivant dans le journal:

E/AndroidRuntime( 507): FATAL EXCEPTION: main 
E/AndroidRuntime( 507): java.lang.IllegalStateException: Could not find a method Foo(View) in the activity class helloworld.Activity1 for onClick handler on view class android.widget.Button with id 'MyButton' 
E/AndroidRuntime( 507): at android.view.View$1.onClick(View.java:2059) 
E/AndroidRuntime( 507): at android.view.View.performClick(View.java:2408) 
E/AndroidRuntime( 507): at android.view.View$PerformClick.run(View.java:8816) 
E/AndroidRuntime( 507): at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime( 507): at android.os.Handler.dispatchMessage(Handler.java:92) 

Répondre

8

MonoDroid ne supporte pas registerin g événements de cette manière.

Vous devez raccorder les événements vous-même dans OnCreate de votre activité.

Mise à jour: Comme une mise à jour, MonoDroid ne supporte maintenant ceci: http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/working_with_jni/#_ExportAttribute_and_ExportFieldAttribute

+0

Alors quel serait le point de l'android: attribut onClick? –

+0

Si vous écrivez en Java, cela fonctionne comme vous le souhaitez. En MonoDroid, il n'a pas de fonction implémentée. – jpobst

+1

Je vois. Merci. Y aurait-il de la documentation sur ce que MonoDroid ne supporte pas? –

5

En plus d'un attribut [Export ("javamethodname")] sur les onClick méthodes et une référence à Mono.Android.Export, vous avez également besoin

using Java.Interop;