《学习笔记》被废弃的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
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!