tri*_*iad 22 android findviewbyid kotlin butterknife kotlin-android-extensions
我正试图找出在Kotlin中进行Android View Binding的最佳方法.似乎有一些选择:
findViewById
val button: Button by lazy { findViewById<Button>(R.id.button) }
Run Code Online (Sandbox Code Playgroud)
牛油刀
https://github.com/JakeWharton/butterknife
@BindView(R.id.button) lateinit var button: Button
Run Code Online (Sandbox Code Playgroud)
Kotlin Android扩展程序
https://kotlinlang.org/docs/tutorials/android-plugin.html
import kotlinx.android.synthetic.main.activity_main.*
Run Code Online (Sandbox Code Playgroud)
我对java版本中的findViewById和Butterknife非常熟悉,但Kotlin中每种视图绑定方法的优缺点是什么?
Kotlin Android扩展程序与RecyclerView + ViewHolder模式相匹配吗?
另外,Kotlin Android Extensions如何处理嵌套视图的视图绑定include?
例如:对于使用的活动activity_main.xml,将如何View custom1访问?
activity_main.xml中
<...>
    <include layout="@layout/custom" android:id="@+id/custom" />
</>
Run Code Online (Sandbox Code Playgroud)
custom.xml
<...>
    <View android:id="@+id/custom1" ... />
    <View android:id="@+id/custom2" ... />
</>
Run Code Online (Sandbox Code Playgroud)
    Rvb*_*b84 16
在 Android 中有很多访问视图的方法。快速概览:
我的建议是:
另见:https : //www.youtube.com/watch?v=Qxj2eBmXLHg
有趣的是,Jake Wharton(ButterKnife 的原作者)现在已经加入 Google 并致力于 ViewBinding。
cha*_*l03 14
kotlin-android-extensions更好Kotlin.ButterKnife也很好,但kotlin-android-extensions在这里是一个更好,更明智的选择.
原因:Kotlin使用synthetic属性和那些按需调用caching function(因此轻微的快速活动/片段加载),同时一次ButterKnife绑定所有视图ButterKnife.bind()(消耗更多的时间).随着Kotlin你甚至不需要使用注释绑定的意见.
是的它也可以与RecyclerView + ViewHolder模式一起使用,你只需要导入kotlinx.android.synthetic.main.layout_main.view.*(如果layout_main.xml是Activity/Fragment布局文件名).
您无需为使用导入的布局做任何额外的工作include.只需使用导入视图的ID即可.
请查看以下官方文档说明:
Kotlin Android Extensions是Kotlin编译器的插件,它做了两件事:
- 在每个Kotlin Activity中添加隐藏的缓存功能和字段.该方法非常小,因此它不会增加APK的大小.
 用函数调用替换每个合成属性调用.
这是如何工作的,当调用合成属性时,接收器是模块源中的Kotlin Activity/Fragment类,调用缓存函数.例如,给定
class MyActivity : Activity()
fun MyActivity.a() { 
    this.textView.setText(“”)
}
Run Code Online (Sandbox Code Playgroud)
在MyActivity中生成隐藏的缓存函数,因此我们可以使用缓存机制.
但是在以下情况中:
fun Activity.b() { 
    this.textView.setText(“”)
}
Run Code Online (Sandbox Code Playgroud)
我们不知道是否仅在来自我们的源的活动或普通Java活动上调用此函数.因此,我们不在那里使用缓存,即使前一个示例中的MyActivity实例是接收器.
链接到上面的文档页面
我希望它有所帮助.
我不能将此问题标记为重复问题,因为您所问的多个问题已在不同问题下得到回答/讨论。
Kotlin 中每种视图绑定方法的优缺点是什么?
这已经在这里讨论过。
Kotlin Android 扩展如何通过 include 处理嵌套视图的视图绑定?例如:对于使用activity_main.xml的活动,如何访问View custom1?
Kotlin Android 扩展所做的一切都在findViewById为您服务。看这里。
Kotlin Android 扩展与 RecyclerView + ViewHolder 模式配合得很好吗?
是的,它确实。但是,您必须将从其中获取的视图保存到属性中,因为它们没有像“活动”或“片段”那样的缓存。看这里。
如果您仍有未解答的问题,请随时要求澄清。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           7981 次  |  
        
|   最近记录:  |