哈?kotlin-android-extensions被弃用了???

Toc

  1. 1. 前言
  2. 2. Solution: ViewBinding
    1. 2.1. 1.在build.gradle中配置ViewBinding
    2. 2.2. 2.在Activity中使用ViewBinding

前言

今天阅读了郭霖的《第一行代码》第三版,很惊讶地发现获取控件的实例竟然不需要像以前那样findViewById了,通过’kotlin-android-extensions’插件就可以直接通过控件的id来获取控件实例。
举个栗子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.example.layouttest1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main2.*

class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)

// button3为Button控件的id
button3.setOnClickListener {
Toast.makeText(this,"Yes!",Toast.LENGTH_LONG).show() // 弹出一个Toast
}
}
}

然而此时,Android Studio下面的Build Output有一条Warning:
Build Output

1
The 'kotlin-android-extensions' Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

???? 这么方便的功能这么就被弃用了呢??
在此就不细究是什么原因导致了官方弃用’kotlin-android-extensions’,让我们来康康有什么其它可以省去findViewById的解决方案。

Solution: ViewBinding

1.在build.gradle中配置ViewBinding

打开build.gradle,添加

1
2
3
buildFeatures {
viewBinding true
}

build.gradle

2.在Activity中使用ViewBinding

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.example.layouttest1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.layouttest1.databinding.ActivityMain2Binding

class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding2 = ActivityMain2Binding.inflate(layoutInflater)
setContentView(binding2.root)

// button3为Button控件的id
binding2.button3.setOnClickListener {
Toast.makeText(this,"Yes!",Toast.LENGTH_LONG).show() // 弹出一个Toast
}
}
}

OK!以上就是ViewBinding的基本使用~

Android开发
gRPC与REST的区别
Activity的生命周期(Android)
© 2020 东南dnf