ViewBind的使用
什么是ViewBind?
1.ViewBind是findViewById的替代品
2.是谷歌推荐的趋势
注意点:
- 以前 kotlin默认引入插件 kotlin-android-extensions
- Kotlin 1.4.20 去掉了这个插件,改用ViewBind替代
弃用期随着 Kotlin 1.4.20 的发布正式开始。android-kotlin-extensions 将继续保留至少一年时间,但在 2021 年 9 月或之后的 Kotlin 版本中将被移除。
kotlin-android-extensions
kotlin-android-extensions这个插件使用起来十分的简单
只需要直接使用id就能获取视图对象
Activity Bind
class MainActivity : AppCompatActivity() {
//绑定视图对象是视图根据 Layout 自动生成的对象
//绑定视图的命名是 layout名驼峰 + Binding
//全局声明 绑定视图对象
private lateinit var mainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//初始化 绑定视图对象
mainBinding=ActivityMainBinding.inflate(layoutInflater)
//利用绑定视图 获取根视图作为activity的界面
setContentView(mainBinding.root)
mainBinding.btnSendGb.setOnClickListener{
//利用绑定视图 获取指定id视图,并且监听事件
}
}
Fragment Bind
private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// 初始化 绑定视图对象
_binding = ResultProfileBinding.inflate(inflater, container, false)
// 返回根视图
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
自定义控件 Bind
class TitleLayout(context:Context,attr:AttributeSet) : LinearLayout(context,attr) {
init{
// 载入 R.layout.title_layout 并返回 view
val view = LayoutInflater
.from(context)
.inflate(R.layout.title_layout,this)
// 通过 bind(view) 静态方法 创建绑定类
val titleLayoutBinding = TitleLayoutBinding.bind(view)
}
}