android - 如何将抽象与 ViewBinding 与基本 Activity 一起使用?

标签 android generic-programming abstraction android-viewbinding

我正在制作一个基类,以便将所有子绑定(bind)设置在基类中
我已经做到了

abstract class BaseActivity2<B : ViewBinding?, T : BaseViewModel?> : AppCompatActivity() {
    private var viewBinding: B? = null
    private var baseViewModel: T? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}
但我无法在 oncreat() 中绑定(bind) View
通常我们将 View 绑定(bind)中的布局绑定(bind)为
binding = ActivityLoginBinding.inflate(layoutInflater)
        setContentView(binding.root)
但我正在寻找基本 Activity 的通用方式

最佳答案

您可以在构造函数中声明一个 lambda 属性来创建绑定(bind)对象

abstract class BaseActivity<B : ViewBinding>(val bindingFactory: (LayoutInflater) -> B) : AppCompatActivity() {
    private lateinit var binding: B

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = bindingFactory(layoutInflater)
        setContentView(binding.root)
    }
}
您也可以定义binding作为懒惰的属性(property)
private val binding: B by lazy { bindingFactory(layoutInflater) }
然后你需要覆盖你的 Activity 中的任何内容
class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate)

关于android - 如何将抽象与 ViewBinding 与基本 Activity 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63686289/

相关文章:

android - Android Studio非常慢-几乎无法工作

c - 它是 C 语言中的通用堆栈数据结构链表实现吗?

c++ - 函数局部静态常量变量初始化语义

Rust 如何在某些结构的静态函数调用中解析类型注释

javascript - Node.js如何实现多态?

C# - 从 "cast"List<BaseClass> 到 List<DerivedClass> 的简单方法?

android - 将微调器的位置解析为新 Activity

android - 如何在自定义listfragment中显示来自sqlite的数据

java - 当我从抽象父类(super class) Activity 调用子类的方法时,发生了什么?

java - 在android中创建一个主要的抽象 View