你需要引入插件

请将 viewBinding 元素添加到其 build.gradle 文件中

  1. apply plugin: 'com.android.application'
  2. apply plugin: 'kotlin-android'
  3. apply plugin: 'kotlin-android-extensions'
  4. android {
  5. compileSdkVersion 29
  6. buildToolsVersion "29.0.3"
  7. //视图绑定插件
  8. viewBinding {
  9. enabled = true
  10. }
  11. defaultConfig {
  12. applicationId "com.example.viewbinding"
  13. minSdkVersion 16
  14. targetSdkVersion 29
  15. versionCode 1
  16. versionName "1.0"
  17. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  18. }
  19. buildTypes {
  20. release {
  21. minifyEnabled false
  22. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  23. }
  24. }
  25. }
  26. dependencies {
  27. implementation fileTree(dir: 'libs', include: ['*.jar'])
  28. implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  29. implementation 'androidx.appcompat:appcompat:1.1.0'
  30. implementation 'androidx.core:core-ktx:1.2.0'
  31. implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
  32. testImplementation 'junit:junit:4.12'
  33. androidTestImplementation 'androidx.test.ext:junit:1.1.1'
  34. androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
  35. }

第一种情况在Activit中使用

  1. package com.example.viewbinding
  2. import androidx.appcompat.app.AppCompatActivity
  3. import android.os.Bundle
  4. import android.os.PersistableBundle
  5. import com.example.viewbinding.databinding.ActivityMainBinding
  6. class MainActivity : AppCompatActivity() {
  7. // 声明变量
  8. private lateinit var binding: ActivityMainBinding
  9. override fun onCreate(savedInstanceState: Bundle?) {
  10. super.onCreate(savedInstanceState)
  11. // 接入插件
  12. binding = ActivityMainBinding.inflate(layoutInflater)
  13. setContentView(binding.root)
  14. }
  15. override fun onStart() {
  16. super.onStart()
  17. // 视图绑定
  18. binding.tit1.text = "activity视图绑定"
  19. // 事件绑定
  20. binding.button.setOnClickListener({
  21. binding.tit1.text = "事件绑定"
  22. })
  23. }
  24. }

在Fragment中使用

package com.example.viewbinding

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.example.viewbinding.databinding.FragmentBlankBinding

/**
 * A simple [Fragment] subclass.
 */
class BlankFragment : Fragment() {
    private lateinit var binding: FragmentBlankBinding
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        binding = FragmentBlankBinding.inflate(layoutInflater)
        return  binding.root
//        return inflater.inflate(R.layout.fragment_blank, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
//        视图绑定
        binding.textView.text = "Fragment视图数据绑定"
//        事件绑定
        binding.button2.setOnClickListener({
            binding.textView.text = "fragment中事件绑定"
        })
    }

}

结语

后面的findViewById不用看,也不用学了。视图绑定是比较好的了