【问题标题】:How to set onclick listener in xamarin?如何在 xamarin 中设置 onclick 监听器?
【发布时间】:2016-02-04 16:45:15
【问题描述】:

我对 C# 和 Xamarin 还很陌生,一直在尝试实现底部工作表元素,但不知道如何正确执行。我正在使用Cocosw.BottomSheet-Xamarin.Android 库。

这是我的代码:

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

现在我想我应该使用b.Listener(...),但它需要一个接口IDialogInterfaceOnClickListener 作为参数,我不知道如何在C# 中正确地做到这一点。

在Java中我可以写

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

我试过这样做:

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

    public IntPtr Handle { get; }

    public void Dispose() {

    }
}

然后是这个:

b.Listener (new BottomSheetActions());

但是没用。

【问题讨论】:

    标签: c# android xamarin xamarin.android


    【解决方案1】:

    改用点击事件。

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

    查看我的另一个answer 了解更多信息

    【讨论】:

    • 这与 setOnClickListener 函数的工作方式不同。使用代码中显示的事件会导致某些问题,例如重叠事件 setOnClickListener 是一个更稳定的选项。
    【解决方案2】:

    最简单的方法确实是使用每个视图都可用的Click 事件。但是,为了实现IOnClickListener(或任何其他同时也是IJavaObject 的接口),您需要使实现它的类继承自Java.Lang.Object

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

    这样你就不需要实现IntPtr Handle,你的代码就可以正常工作了

    【讨论】:

    • 我正在使用第三方库,它需要IDialogInterfaceOnClickListener,所以我不能使用Click 事件,但我可能会尝试从Java.Lang.Object 继承,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2021-09-08
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多