当前位置:   article > 正文

ViewBinding使用以及Base基类简单封装_viewbinding 封装

viewbinding 封装
  • 简单介绍:

        ViewBinding大白话讲就是可以帮助开发者快速找到有id的控件,废话不多说往下走..

  • 简单使用:

在需要使用模块下.gradle文件中配置:

android {
        buildFeatures {
            viewBinding = true
        }
}

配置完成就可以使用了

例如:

  1. class TextActivity : AppCompatActivity() {
  2. lateinit var binding:ActivityTextBinding
  3. override fun onCreate(savedInstanceState: Bundle?) {
  4. super.onCreate(savedInstanceState)
  5. binding = ActivityTextBinding.inflate(layoutInflater)
  6. setContentView(binding.root)
  7. binding.btn.setOnClickListener {}
  8. }
  9. }

ActivityTextBinding类是由对应的activity_text.xml文件去生成的,

如果不想让xml去生成对应的Binding文件可以在xml跟标签加上

tools:viewBindingIgnore="true" 即可

  • 封装BaseActivity基类
  1. abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
  2. protected lateinit var binding: VB
  3. override fun onCreate(savedInstanceState: Bundle?) {
  4. initial()
  5. super.onCreate(savedInstanceState)
  6. binding = createBinding()
  7. setContentView(binding.root)
  8. initView()
  9. initData()
  10. }
  11. open fun initial(){}
  12. protected abstract fun initView()
  13. protected abstract fun initData()
  14. private fun createBinding(): VB {
  15. val vbClass = getVBClass()
  16. val inflateMethod = vbClass.getMethod("inflate", LayoutInflater::class.java)
  17. return inflateMethod.invoke(null, layoutInflater) as VB
  18. }
  19. @Suppress("UNCHECKED_CAST")
  20. private fun getVBClass(): Class<VB> {
  21. val type = javaClass.genericSuperclass as ParameterizedType
  22. val vbClass = type.actualTypeArguments[0] as Class<VB>
  23. return vbClass
  24. }
  25. }
  • 封装BaseFragment基类
  1. abstract class BaseFragment<VB : ViewBinding> : Fragment() {
  2. protected lateinit var binding: VB
  3. override fun onCreateView(
  4. inflater: LayoutInflater,
  5. container: ViewGroup?,
  6. savedInstanceState: Bundle?
  7. ): View? {
  8. binding = createBinding(inflater, container)
  9. return binding.root
  10. }
  11. override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  12. super.onViewCreated(view, savedInstanceState)
  13. initView()
  14. initData()
  15. }
  16. abstract fun initData()
  17. protected abstract fun initView()
  18. private fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB {
  19. val vbClass = getVBClass()
  20. val inflateMethod = vbClass.getMethod("inflate", LayoutInflater::class.java, ViewGroup::class.java, Boolean::class.java)
  21. return inflateMethod.invoke(null, inflater, container, false) as VB
  22. }
  23. @Suppress("UNCHECKED_CAST")
  24. private fun getVBClass(): Class<VB> {
  25. val type = javaClass.genericSuperclass as ParameterizedType
  26. val vbClass = type.actualTypeArguments[0] as Class<VB>
  27. return vbClass
  28. }
  29. }
  • 注意

如果开启了混淆请在proguard-rules.pro文件添加:

-keep class * implements androidx.viewbinding.ViewBinding {
    *;
}

 大功告成

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/319918
推荐阅读
相关标签
  

闽ICP备14008679号