提问人:seba123neo 提问时间:10/26/2023 更新时间:10/26/2023 访问量:76
使用 ViewBinding 为具有相同视图的多个活动创建基本活动
Create a Base Activity with ViewBinding for multiple activities with same views
问:
我有 20 个不同的活动,具有相同的 MaterialTextView(所有活动中的名称相同)
在所有活动(在 onCreate 事件中)中,我使用相同的文本初始化 TextView:
textview.text = "Hello"
每个活动都有不同的绑定 XML,如 ActivityOneBinding、ActivityTwoBinding、ActivitythreeBinding 等
我需要通过创建一个要继承的 actract 类来减少所有活动中的“重复代码”,并在其中设置一次文本
我尝试过要继承的抽象类示例,但是textview的名称无法识别,因为它们是不同的绑定
答:
1赞
Marcin Mrugas
10/26/2023
#1
我尝试过要继承的抽象类示例,但是textview的名称无法识别,因为它们是不同的绑定
可以传递对 TextView 对象的引用,而不是传递视图名称。在这个例子中,这样的函数是:getHeaderView()
BaseActivity.kt (英语)
abstract class BaseActivity<VB : ViewBinding>() : AppCompatActivity() {
abstract fun getHeaderView(): TextView
protected lateinit var binding: VB
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = inflateView()
setContentView(binding.root)
}
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)
val headerView = getHeaderView()
headerView.text = "Hello world!"
}
abstract fun inflateView(): VB
}
class SecondActivity : BaseActivity<SecondActivityBinding>() {
override fun getHeaderView(): TextView = binding.headerView
override fun inflateView() = SecondActivityBinding.inflate(layoutInflater)
}
评论
findViewById()