基类中使用ViewBinding的泛型封装方案

212 阅读1分钟

1d888e4bcebe4b669384e60272a438a2_cm15kqde878c73bii770.png

基类中的处理

abstract class BaseActivity<VB: ViewBinding> : AppCompatActivity() {
    private var _binding: VB? = null
    protected val binding get() = _binding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //关键代码
        _binding = inflate(layoutInflater)
        setContentView(binding.root)
    }
    
    //关键代码
    protected abstract fun getVBInflate(): (LayoutInflater) -> VB

    override fun onDestroy() {
        super.onDestroy()
        _binding = null
    }
}

实现类中的使用

class MainActivity : BaseActivity<ActivityMainBinding>() {
    
    //实现getVBInflate方法
    override fun getVBInflate(): (LayoutInflater) -> ActivityMainBinding {
        return ActivityMainBinding::inflate
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding.myButton.setOnClickListener { /* ... */ }
    }
}