Android自家的,又可以省去findviewbyid(),而且Butterknife上大神都已經推薦使用的,還有什麼理由不去改寫呢。build.gradle中開啟viewBinding功能。Activity 綁定private lateinit var mBinding: ActivityEbo... ...
Android自家的,又可以省去findviewbyid(),而且Butterknife上大神都已經推薦使用的,還有什麼理由不去改寫呢
build.gradle
開啟viewBinding功能
android {
...
viewBinding.enabled = true
}
上面方法提示過時,更改為下麵的方法
android {
...
buildFeatures{
viewBinding true
}
}
Activity 綁定
說明一下,這個是kotlin語法的,java語法的寫法差不多,只是語法有些差異
private lateinit var mBinding: ActivityEbookBinding
//有個坑特別說明一下,這裡的ActivityEbookBinding不是什麼內部類,而是你的layout對應的databinding類,開始一直以為有什麼包沒有引入呢。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityEbookBinding.inflate(layoutInflater)
setContentView(mBinding.root)
}
java
這裡還是放一下java語法的代碼吧,省得還沒有轉到kotlin的朋友看了一頭霧水
這裡再強調一下,記得將我代碼中的ActivityEbookBinding換成你自己 layout 對應的 binding 上,命名規則就是你的layout去掉下劃線然後首字母大寫然後末尾加上Binding就是了
private ActivityEbookBinding mBinding;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityEbookBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
}
調用
mBinding中可以直接根據id找到相應的控制項進行操作
mBinding.bookContent.setText("HelloWorld");
這裡再記錄一個小坑,就是如果你的layout裡面控制項的id有使用“_”下劃線的話,viewbinding也會將它去掉下劃線改成駝峰命名,並不是你的控制項沒有被認到,害我找了半天才想到這一茬。