赞
踩
ViewBinding大白话讲就是可以帮助开发者快速找到有id的控件,废话不多说往下走..
在需要使用模块下.gradle文件中配置:
android { buildFeatures { viewBinding = true } }
配置完成就可以使用了
例如:
- class TextActivity : AppCompatActivity() {
- lateinit var binding:ActivityTextBinding
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = ActivityTextBinding.inflate(layoutInflater)
- setContentView(binding.root)
- binding.btn.setOnClickListener {}
- }
- }
ActivityTextBinding类是由对应的activity_text.xml文件去生成的,
如果不想让xml去生成对应的Binding文件可以在xml跟标签加上
tools:viewBindingIgnore="true" 即可
- abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
- protected lateinit var binding: VB
- override fun onCreate(savedInstanceState: Bundle?) {
- initial()
- super.onCreate(savedInstanceState)
- binding = createBinding()
- setContentView(binding.root)
- initView()
- initData()
- }
- open fun initial(){}
- protected abstract fun initView()
- protected abstract fun initData()
-
- private fun createBinding(): VB {
- val vbClass = getVBClass()
- val inflateMethod = vbClass.getMethod("inflate", LayoutInflater::class.java)
- return inflateMethod.invoke(null, layoutInflater) as VB
- }
-
- @Suppress("UNCHECKED_CAST")
- private fun getVBClass(): Class<VB> {
- val type = javaClass.genericSuperclass as ParameterizedType
- val vbClass = type.actualTypeArguments[0] as Class<VB>
-
- return vbClass
- }
- }

- abstract class BaseFragment<VB : ViewBinding> : Fragment() {
-
- protected lateinit var binding: VB
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = createBinding(inflater, container)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- initView()
- initData()
- }
-
- abstract fun initData()
-
- protected abstract fun initView()
-
- private fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB {
- val vbClass = getVBClass()
- val inflateMethod = vbClass.getMethod("inflate", LayoutInflater::class.java, ViewGroup::class.java, Boolean::class.java)
- return inflateMethod.invoke(null, inflater, container, false) as VB
- }
-
- @Suppress("UNCHECKED_CAST")
- private fun getVBClass(): Class<VB> {
- val type = javaClass.genericSuperclass as ParameterizedType
- val vbClass = type.actualTypeArguments[0] as Class<VB>
- return vbClass
- }
-
- }

如果开启了混淆请在proguard-rules.pro文件添加:
-keep class * implements androidx.viewbinding.ViewBinding { *; }
大功告成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。