微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kotlin与Android:基类和Kotlin Android扩展

所以我使用了Kotlin Android Extensions,我觉得它很容易使用,非常值得.没有更多findViewById或Butterknife.Bind(…).除了一种情况外,我发现这一切都没有问题.

在基类中,例如BaseActivity,通常会有一堆视图出现在所有布局中,例如工具栏.和常见的操作,如changetoolbarColor()或setToolbarTitle().

在这个简单的情况下,我不能使用Kotlin Android Extensions,因为它是一个基类,视图本身将出现在多个布局上,并且不能导入属性.在这种情况下,我只是简单地使用lazy {find<>(…).

有没有办法用内置的Android扩展插件来实现?

解决方法

Kotlin Android Extensions为给定布局上的每个元素生成扩展函数.由于扩展方法存在于继承模型之外,因此无法定义像抽象val工具栏这样的公共协议:父项上的工具栏.

但是,在引擎盖下,扩展方法只执行findById,如果布局上存在给定的ID,它将获取该元素.这意味着如果在布局中为公共元素维护相同的ID(即:所有带@ id / toolbar的工具栏),则可以使用公共元素及其各自的ID创建虚拟布局.此布局将作为一种接口工作,允许您导入kotlinx.android.synthetic.main.base_activity_dummy.*,从而生成所需的扩展方法.

通过执行上述操作,BaseActivity上的this.toolbar将获取具体活动上的实际项目,而不是虚拟布局上的元素.

当然,这种技术虽然方便,但容易出错,并且可能会使您的程序对于局外人来说非常混乱.但同样,它不会比在任何地方调用findById更容易出错.

原文地址:https://www.jb51.cc/android/315842.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐