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更容易出错.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...