我正在关注 Google 的 Android 教程,发现有两种方法可以根据标题获取小部件回调(或者只有 onClick - 我不知道)。
我是一名高级 Java Swing 开发人员,所以内部类方法让我有宾至如归的感觉 :) 但我知道 xml 方法较新——所以谷歌添加它一定是有原因的。
这里的推理是什么?在android平台上这样做是否“更好”,现在是否应该避免内部类方法(在支持它的版本上)?
我正在关注 Google 的 Android 教程,发现有两种方法可以根据标题获取小部件回调(或者只有 onClick - 我不知道)。
我是一名高级 Java Swing 开发人员,所以内部类方法让我有宾至如归的感觉 :) 但我知道 xml 方法较新——所以谷歌添加它一定是有原因的。
这里的推理是什么?在android平台上这样做是否“更好”,现在是否应该避免内部类方法(在支持它的版本上)?
我没有使用 XMLonClick
属性,因为这意味着Activity
膨胀 XML 的必须实现 onClick 值方法。但是,如果您进行一些重构并更改此方法,那么如果更改与 XML 不相关,您将获得运行时异常。或者,如果您想使用一些include
或merge
.
添加更多:如果您使用片段,则必须将单击事件委托给定义onClick
XML 属性的片段。
它确实是更少的代码,但是为了维护/重构这样的代码,它使事情变得困难并且容易出错。所以不要在生产代码中使用它。
您可以通过 xml 和以编程方式定义按钮等小部件。Can 提供了双向添加侦听器的能力。因此,一个比另一个没有优势。
如果您想从 xml 进行特定于布局的工作,android 已经为您提供了执行此操作的能力。
但是有人可能会以编程方式定义布局,然后必须从代码中定义点击监听器。
但也有人混合使用。
我希望你明白我的意思。
如果您以编程方式执行此操作,您可以只编写 onClick() 和 iside 编写一个 switch 案例,并根据视图 ID,您可以定义我个人认为更容易使用的行为。
如果按钮将始终存在并且将始终执行相同的操作,那么使用声明性事件处理程序是有意义的。就像你甚至不需要findViewById()
为那个按钮做 a 一样。
如果您可能想要启用/禁用单击或可能正在动态生成按钮等,那么在代码中动态设置事件处理程序是有意义的。
View.OnClickListener
是一个接口,它定义了onClick(View)
方法。
您将在代码中实现接口和方法。