三行代码配置ViewBinding
在build.gradle的android下面粘贴下面代码
android {
viewBinding {
enabled = true
}
}
在Activity中使用ViewBinding:
1 在Activity中导入生成的Binging类 比如:
//com.mail.myapplication是Activity所在的包名
//AtyMainBinding是根据xml布局名导入对应的binding
//比如你layout文件下命名的xml文件叫aty_main.xml 对应的Binging类就叫AtyMainBinding
//比如你layout文件下命名的xml文件叫item_list.xml 对应的Binging类就叫ItemListBinding
import com.mail.myapplication.databinding.AtyMainBinding
2 替换之前的setContentView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
var mBinding = AtyMainBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
}
}
3 使用Binding 获取控件
mBinding.mtvName.text = "栗子"
在RecyclerView中使用ViewBinding:
也很简单,算了直接贴代码了
为了偷懒这里我直接写在内部类了
inner class MyRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
when (viewType) {
0 -> {
//ItemHomeListHeadBinding 就是对应布局文件 item_home_list_head.xml
return fGoldViewHeadHolder(ItemHomeListHeadBinding.inflate(LayoutInflater.from(context)))
}
else -> {
//ItemHomeListBinding 就是对应布局文件 item_home_list.xml
return fGoldViewHolder(ItemHomeListBinding.inflate(LayoutInflater.from(context)))
}
}
}
override fun getItemCount(): Int = list.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is fGoldViewHolder) {
//比较懒 直接用了with
with(holder) {
with(mBinding) {
tvName.text = list[position]
var url = "https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F0114%2Fea09bd73p00qmxkvg008wc000fk00f4m.png&thumbnail=650x2147483647&quality=80&type=jpg"
ImageLoader.loadImage(activity, url, imgv)
}
}
}
if (holder is fGoldViewHeadHolder) {
with(holder) {
with(mBinding) {
var adapter = ImageNetAdapter(list_img)
bannerX.adapter = adapter
bannerX.addBannerLifecycleObserver(activity)
bannerX.indicator = CircleIndicator(activity)
bannerX.setOnBannerListener { data, position ->
var map = data as HashMap<String, String>
showToastS(position.toString() + "," + map.get("url"))
}
}
}
}
}
override fun getItemViewType(position: Int): Int {
return position
}
inner class fGoldViewHolder(binding: ItemHomeListBinding) : RecyclerView.ViewHolder(binding.root) {
var mBinding: ItemHomeListBinding = binding
}
inner class fGoldViewHeadHolder(binding: ItemHomeListHeadBinding) : RecyclerView.ViewHolder(binding.root) {
var mBinding: ItemHomeListHeadBinding = binding
}
}