《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 協議》,轉載必須註明作者和本文連結