如何将抽象与 ViewBinding 与基本活动一起使用? [英] How to use abstraction with ViewBinding with base activity?
本文介绍了如何将抽象与 ViewBinding 与基本活动一起使用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在创建一个基类,以便子类的所有绑定都将设置在基类中
I was making a base class so that all bindings for child will be set in base
我已经做到了这一点
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() 中绑定视图一般我们在视图绑定中绑定布局为
but am unable to get a way to bind view in oncreat() generally we bind layout in view binding as
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)
但我正在寻找基本活动中的通用方式
but i am looking for generalized way in base activity
推荐答案
其他答案也可以解决问题,但我想以一种干净的方式来做.
Other answer will also solve problem but I would like to do in a clean way.
我的基类
abstract class BaseVMActivity<VM : ViewModel, B : ViewBinding> : BaseActivity() {
lateinit var viewModel: VM
lateinit var binding: B
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this, factory).get(getViewModelClass())
binding = getViewBinding()
setContentView(binding.root)
}
private fun getViewModelClass(): Class<VM> {
val type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
return type as Class<VM>
}
abstract fun getViewBinding(): B
}
我的活动:
class MainActivity : BaseVMActivity<AppViewModel, ActivityMainBinding>() {
override fun getViewBinding() = ActivityMainBinding.inflate(layoutInflater)
}
现在我可以直接访问 viewModel 或绑定:
Now I can directly access viewModel or binding:
fun dummy(){
binding.bvReport.text = viewModel.getReportText()
}
这篇关于如何将抽象与 ViewBinding 与基本活动一起使用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文