我正试图找出在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) android findviewbyid kotlin butterknife kotlin-android-extensions
在定义全局android.widget变量时,例如TextView,是否优先使用lateinit或by lazy?我最初认为使用by lazy将是首选,因为它不可变但我不完全确定.
by lazy 例:
class MainActivity: AppCompatActivity() {
val helloWorldTextView by lazy { findViewById(R.id.helloWorldTextView) as TextView }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
updateTextView(helloWorldTextView)
}
fun updateTextView(tv: TextView?) {
tv?.setText("Hello?")
}
}
Run Code Online (Sandbox Code Playgroud)
lateinit 例:
class MainActivity: AppCompatActivity() {
lateinit var helloWorldTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
helloWorldTextView = findViewById(R.id.helloWorldTextView) as TextView
updateTextView(helloWorldTextView)
}
fun updateTextView(tv: TextView?) {
tv?.setText("Hello?")
}
}
Run Code Online (Sandbox Code Playgroud)
在定义全局android.widgetvar/val 时,使用一个优于另一个有什么好处吗?使用 …