《学习笔记》被废弃的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 协议》,转载必须注明作者和本文链接