《学习笔记》被废弃的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 协议》,转载必须注明作者和本文链接
支付宝领个红包就是对我最大的赞赏了
shijf