📜  kotlin 在没有 findviewbyid 的情况下如何设置 - Kotlin (1)

📅  最后修改于: 2023-12-03 14:43:41.822000             🧑  作者: Mango

Kotlin 在没有 findViewById 的情况下如何设置

在 Kotlin 中,我们可以使用插件 kotlin-android-extensions 或者使用 ViewBinding 来取代传统的 findViewById 方法。这些方法可以更加简洁和安全地获取视图,避免了类型转换和空指针异常的问题。

1. 使用 kotlin-android-extensions 插件

首先,在项目的 build.gradle 文件中添加以下依赖:

apply plugin: 'kotlin-android-extensions'

然后,在你的布局文件中,给需要获取的视图添加一个 id:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!" />

在你的 Kotlin 代码中,你可以直接引用这个视图,而不需要显式调用 findViewById 方法:

import kotlinx.android.synthetic.main.activity_main.*

// ...

myTextView.text = "Hello Kotlin!"

这里的 kotlinx.android.synthetic.main.activity_main 是自动生成的,它会根据你的资源文件名自动命名。布局文件名为 activity_main 的话,对应的生成类就是 ActivityMain

你不需要再显式调用 findViewById 方法,也不需要手动转换类型,直接使用即可。

2. 使用 ViewBinding

如果你不想使用 kotlin-android-extensions 插件,你可以选择使用 ViewBinding。

首先,在项目的 build.gradle 文件中添加以下依赖:

android {
    // ...

    viewBinding {
        enabled = true
    }
}

然后,在你的布局文件中,给需要获取的视图添加一个 id,如同上面所示。

接下来,使用 ViewBinding 来获取视图:

import com.example.app.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.myTextView.text = "Hello Kotlin!"
    }
}

这里的 ActivityMainBinding 是根据你的布局文件名生成的,你可以根据需要自定义名字。

使用 ViewBinding,你将可以直接通过 binding.myTextView 来引用视图。

同时,ViewBinding 还提供了类型安全的访问和空指针安全的视图绑定。

希望这些方法对你有帮助!