相关疑难解决方法(0)

Kotlin Android View Binding:findViewById vs Butterknife vs Kotlin Android Extension

我正试图找出在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

22
推荐指数
3
解决办法
7981
查看次数

定义全局android.widget var/val时,"lateinit"或"by lazy"

在定义全局android.widget变量时,例如TextView,是否优先使用lateinitby 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 时,使用一个优于另一个有什么好处吗?使用 …

android-widget kotlin android-studio

8
推荐指数
1
解决办法
744
查看次数