ViewBinding初识

263 阅读1分钟
三行代码配置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
        }
    }