Android的视图绑定

使用kotlin编写Android项目时可以用kotlin合成进行视图绑定,但升级到Android Studio4.1以后,发现项目中不能直接通过控件名称引用视图了,当时还不清楚原因,只是发现gradle文件中没有添加kotlin扩展库,添加kotlin扩展库就可以像原来一样直接引用控件。
今天创建了一个新的Android App,像往常一样在gradle文件中添加了kotlin扩展库。Build时发现Build Output窗口中有一行提示,表示kotlin合成已经被弃用,应该使用JetPack的视图绑定(View Binding)来替代,并给出了相应的网址。考虑到国内打不开developer.android.com这个网址(其实可以用developer.andoid.google.cn代替),还是把步骤写在这里。

  1. 创建新项目后,在gradle(app)文件中加入
android {
        ...
        viewBinding {
            enabled = true
        }
    }
  1. 在每个Activity中声明一个绑定类变量。绑定类是系统自动为Activity布局文件生成的,生成的类名规则是:将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。比如MainActivity的布局文件为activity_main.xml,绑定类就是ActivityMainBinding。
     private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
    }

然后就可以使用binding.控件名称的方式来引用视图了,如:

binding.textViewName.text = "test"
binding.button.setOnClickListener{
	……
}

在Fragement中使用视图绑定也是差不多的,直接把官网的代码贴到这里:

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
    }

要注意的是,Fragment 的存在时间比其视图长。请务必在 Fragment 的 onDestroyView() 方法中清除对绑定类实例的所有引用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值