《学习笔记》被废弃的Kotlin Android Extensions插件替代品 View Binding
《Android 第一行代码》学习中,去年出的书感觉,今年就有点旧了。92页中,使用的Kotlin Android Extensions插件,官方已经废弃,替代品为 View Binding, 参考文章 【译】迁移被废弃的Kotlin Android Extensions插件
ActivityMainBinding.inflate(getLayoutInflater())不起作用
package com.example.activitytest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import com.example.activitytest.databinding.FirstLayoutBinding
class FirstActivity : AppCompatActivity() {
private lateinit var binding: FirstLayoutBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.first_layout)
// val button = findViewById<Button>(R.id.button) // 1. 泛型显示的指定类型
// val button: Button = findViewById(R.id.button) // 2. 显示的指定类型
// button.setOnClickListener {
// Toast.makeText(this, "You click Button 1", Toast.LENGTH_SHORT).show()
// }
// binding.
// 最新推荐写法
binding = FirstLayoutBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button.setOnClickListener {
Toast.makeText(this, "You click Button 1", Toast.LENGTH_SHORT).show()
}
}
}
二、在自定义组件中使用(ViewBinding 在自定义控件【view 】中不起作用)
package com.example.uiwidgettest
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import android.widget.Toast
import com.example.uiwidgettest.databinding.TitleBinding
class TitleLayout(context: Context, attrs: AttributeSet): LinearLayout(context, attrs) {
// 第三个参数必须为 true,待以后学完书籍后解惑,现在认为是在父级中直接嵌入
private var binding = TitleBinding.inflate(LayoutInflater.from(context), this, true)
init {
LayoutInflater.from(context).inflate(R.layout.title, this)
binding.titleBack.setOnClickListener {
val activity = context as Activity
activity.finish()
}
binding.titleEdit.setOnClickListener {
Toast.makeText(context, "You clicked Edit button", Toast.LENGTH_LONG).show()
}
}
}
// println("以下是传统的写法")
// val titleBack = findViewById<Button>(R.id.titleBack)
// titleBack.setOnClickListener {
// val activity = context as Activity
// println("以下是旧的写法")
// activity.finish()
// }
//
// val titleEdit = findViewById<Button>(R.id.titleEdit)
//
// titleEdit.setOnClickListener {
// Toast.makeText(context, "You clicked Edit button", Toast.LENGTH_LONG).show()
// }
// }
//}
本作品采用《CC 协议》,转载必须注明作者和本文链接