Android- (button.Click += event;) 和 (button.SetOnClickListener(this)) 之间有什么区别?

标签 android xamarin events button interface

他们都做同样的工作——定义点击按钮时发生的事情。 那么,两者之间的真正区别是什么?

最佳答案

Xamarin 在 Android(和 iOS)框架内的许多地方创建 C# 包装器,将平台的 native 方法规范化为标准的 .Net/C# 约定。

SetOnClickListener 是 native Java 方法,C# Click 是 native 方法的 EventHandler 包装器。

Click 事件处理程序背后的代码:

public event EventHandler Click {
    add {
        EventHelper.AddEventHandler (ref weak_implementor_SetOnClickListener, (Func<IOnClickListenerImplementor>)__CreateIOnClickListenerImplementor, (Action<IOnClickListener>)SetOnClickListener, (Action<IOnClickListenerImplementor>)delegate (IOnClickListenerImplementor __h) {
            __h.Handler = (EventHandler)Delegate.Combine (__h.Handler, value);
        });
    }
    remove {
        EventHelper.RemoveEventHandler (ref weak_implementor_SetOnClickListener, (Func<IOnClickListenerImplementor, bool>)IOnClickListenerImplementor.__IsEmpty, (Action<IOnClickListener>)delegate {
            SetOnClickListener (null);
        }, (Action<IOnClickListenerImplementor>)delegate (IOnClickListenerImplementor __h) {
            __h.Handler = (EventHandler)Delegate.Remove (__h.Handler, value);
        });
    }
}

正如您在代码中看到的那样,SetOnClickListener 是更有效的方法,因为它避免了包装器。

关于Android- (button.Click += event;) 和 (button.SetOnClickListener(this)) 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682730/

相关文章:

java - OpenGL ES 纹理无法正确渲染

android - 使用 Laravel 为 Android 提供 mp3 流

java - Android Studio,尝试从自定义 ListView 按钮删除 Sql 注册表时出错

Xamarin.Forms Shell - 除非在 <Tab> 内,否则无法使用 ShellContent?

c# - 使用 Xamarin 更新 UI

ios - iOS 中 TableView 中单个单元格中的两个按钮单击事件(Xamarin)

c# - 响应式订阅在一段时间内没有跟随不同事件的事件

java - Android Studio 模拟器无法启动内存限制相关的错误消息

ios - 如何从 TextField 获取实时更改

c# - 如何让我的 C# PictureBox 传播鼠标事件? (提供截图)