web-dev-qa-db-fra.com

Comment définir l'écouteur onclick dans xamarin?

Je suis assez nouveau sur C # et Xamarin et j'ai essayé d'implémenter un élément de feuille de fond et je ne sais pas comment le faire correctement. J'utilise Cocosw.BottomSheet-Xamarin.Android bibliothèque.

Voici mon code:

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

Maintenant, je pense que je devrais utiliser b.Listener(...), mais cela nécessite une interface IDialogInterfaceOnClickListener comme paramètre et je ne sais pas comment le faire correctement en C #.

En Java je pourrais écrire

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

J'ai essayé de faire ça:

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

    public IntPtr Handle { get; }

    public void Dispose() {

    }
}

et puis ceci:

b.Listener (new BottomSheetActions());

Mais cela n'a pas fonctionné.

16
Artūrs Eimanis

La manière la plus simple est en effet d'utiliser l'événement Click qui est disponible sur chaque vue. Cependant, afin d'implémenter IOnClickListener (ou toute autre interface qui est également un IJavaObject), vous devez faire en sorte que la classe l'implémentant hérite de Java.Lang.Object :

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

De cette façon, vous n'avez pas besoin d'implémenter IntPtr Handle et votre code fonctionnera très bien

12
William Barbosa

Utilisez plutôt l'événement de clic.

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

Voir mon autre réponse pour plus d'informations

22
Let'sRefactor