2016-06-13 75 views
1

這是我的XML代碼:Xamarin XML安卓的onClick回調方法

<Button 
    android:text="Button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/MyButton" 
    android:id="@+id/button1" 
    android:onClick="sayHellow" /> //RELEVANT PART 

這是我的主要活動:

[Activity(Label = "FFFF", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/Theme.AppCompat.Light")] 
public class MainActivity : AppCompatActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 
    } 
    public void sayHellow(View v) //CALLBACK FUNCTION 
    { 
     Snackbar.Make(v, "My text", Snackbar.LengthLong) 
      .Show(); 
    } 
} 

問題是,我得到一個運行時錯誤和調試窗口抱怨Button找不到「sayHellow」函數,但正如您所看到的,我根據文檔聲明瞭一切。

回答

2

您必須導出方法:

[Export("sayHellow")] 
public void sayHellow(View v) 
{ 
    Snackbar.Make(v, "My text", Snackbar.LengthLong).Show(); 
} 

而且你必須將引用添加到Java.Interop.dll

enter image description here


一個簡單的解決辦法是:

Button button = FindViewById<Button> (Resource.Id.myButton); 

button.Click += delegate { 
    //Clicked 
}; 
+1

非常感謝,我在引用'Mono.Android.Export.dll'後不得不使用'Java.Interop.Export',但你是對的,它正在工作。 今天你幫了我很多,我很感激。 –

+0

是的,我已經在我的回答中說過,併爲它添加了截圖。 – jzeferino