joh*_*crq 7 android findviewbyid kotlin
所以我用过Kotlin Android Extensions
,我觉得它很容易使用,非常值得.没有更多findViewById
或Butterknife.Bind(...)
.除了一种情况外,我发现这一切都没有问题.
例如,在基类中,BaseActivity
通常会有一堆视图出现在所有布局中,例如工具栏.和常见的操作changeToolbarColor()
,或setToolbarTitle()
.
在这个简单的情况下,我不能使用Kotlin Android Extensions
,因为它是一个基类,视图本身将出现在多个布局上,并且不能导入属性.在这种情况下,我只是简单地使用by lazy {find<>(...)
.
有没有办法用内置的Android扩展插件完成这个?
Kotlin Android Extensions
为给定布局上的每个元素生成扩展函数.由于扩展方法存在于继承模型之外,因此无法abstract val toolbar:Toolbar
在父级上定义公共协议.
但是,在引擎盖下,扩展方法只能执行findById
,如果布局上存在给定的ID,它将获取该元素.这意味着如果为布局中的公共元素保持相同的ID(即:所有工具栏都有@id/toolbar
),则可以使用公共元素及其各自的ID创建虚拟布局.此布局将作为一种接口工作,允许您执行import kotlinx.android.synthetic.main.base_activity_dummy.*
并因此生成所需的扩展方法.
通过执行上述操作,this.toolbar
您BaseActivity
将在具体活动上获取实际项目而不是虚拟布局上的元素.
当然,这种技术虽然方便,但容易出错,并且可能会使您的程序对于局外人来说非常混乱.但同样,它不会比findById
在任何地方呼叫更容易出错.
归档时间: |
|
查看次数: |
660 次 |
最近记录: |