2016-02-04 28 views
10

Ich bin ziemlich neu in C# und Xamarin und habe versucht, ein Bottom-Sheet-Element zu implementieren und weiß nicht, wie man es richtig macht. Ich verwende Cocosw.BottomSheet-Xamarin.Android Bibliothek.Wie setze ich einen Listener in Xamarin?

Hier ist mein Code:

Cocosw.BottomSheetActions.BottomSheet.Builder b = new Cocosw.BottomSheetActions.BottomSheet.Builder (this); 
b.Title ("New"); 
b.Sheet (Resource.Layout.menu_bottom_sheet) 

Jetzt denke ich, dass ich b.Listener(...) verwenden sollte, aber es erfordert eine Schnittstelle IDialogInterfaceOnClickListener als Paramater und ich weiß nicht, wie es in C# richtig zu tun.

In Java könnte ich schreiben

button.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Perform action on click 
    } 
}); 

Ich habe versucht, dies zu tun:

class BottomSheetActions : IDialogInterfaceOnClickListener { 
    public void OnClick (IDialogInterface dialog, int which) { 
     Console.WriteLine ("Hello fox"); 
    } 

    public IntPtr Handle { get; } 

    public void Dispose() { 

    } 
} 

und dann das:

b.Listener (new BottomSheetActions()); 

Aber es hat nicht funktioniert.

Antwort

6

Der einfachste Weg ist in der Tat mit dem Click Ereignis, das auf jeder Ansicht verfügbar ist. Um jedoch IOnClickListener (oder irgendeine andere Schnittstelle, die auch ist ein IJavaObject) implementieren müssen Sie die Klasse machen deren Umsetzung von Java.Lang.Object erben:

internal class BottomSheetActions : Java.Lang.Object, IDialogInterfaceOnClickListener 
{ 
    public void OnClick (IDialogInterface dialog, int which) 
    { 
     Console.WriteLine ("Hello fox"); 
    } 
} 

Auf diese Weise brauchen Sie nicht IntPtr Handle und Ihr Code zu implementieren funktionieren gut

+0

Ich arbeite mit einer Drittanbieter-Bibliothek, die 'IDialogInterfaceOnClickListener' erfordert, so dass ich' Click'-Ereignis nicht verwenden kann, aber ich könnte versuchen, von 'Java.Lang.Object' zu erben, danke. –

12

Verwenden Sie stattdessen click-Ereignis.

button.Click += delegate 
{ 
    //Your code 
}; 

meine anderen answer für weitere Informationen siehe

+2

das funktioniert nicht das gleiche wie SetOnClickListener Funktion. Das Verwenden des Ereignisses, wie in Ihrem Code gezeigt, verursacht bestimmte Probleme wie überlappende Ereignisse Der SetOnClickListener ist eine stabilere Option. –

Verwandte Themen