이것은 매우 직관적이긴 하나 새로운 액티비티, 프래그먼트 생성시마다 반복해야 하므로 효율적이지 못하다.
따라서 BaseActivity, BaseFragment 를 통해 보일러 플레이트 코드(반복되는 코드)를 정리하여 쉽게 사용해보자.
1️⃣ Activity
기존방식
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.lifecycleOwner = this
}
}
Activity의 경우 바인딩 생성 작업과 생명주기를 관찰할 수 있도록 전달해주는 코드가 필요하다.
BaseActivity
abstract class BaseActivity<T : ViewDataBinding>(
@LayoutRes val layoutResId: Int
) : AppCompatActivity(){
protected lateinit var binding: T
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, layoutResId)
binding.lifecycleOwner = this
init()
}
protected abstract fun init()
}
AppCompatActivity를 상속받는 추상클래스 BaseActivity 를 정의해주고,
제네릭을 활용하여 타입을 일반화한 코드를 작성해준다.
class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main) {
override fun init() {
}
}