Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dialog resize
- Android
- Retrofit Kotlin
- ScrollView with ConstraintLayout
- java
- 레트로핏 MVVM
- 프로그래머스
- 다이얼로그 프래그먼트
- 스크롤뷰 자식 뷰 높이 동적조절
- 레트로핏 코틀린
- dialogfragment singleton
- recyclerview
- Retrofit with MVVM
- location System
- 리사이클러뷰
- 다이얼로그 크기조절
- 레트로핏2
- NestedScrollView
- ScrollView Child View Height Programmatically
- 쉐어드
- viewBinding
- DataBinding
- lifecycleScope
- programmers
- 데이터바인딩
- 뷰바인딩
- 인텐트란?
- 위치정보확인
- dialog fragment
- 안드로이드
Archives
- Today
- Total
안드로이드 세계
[Android] DataBinding 편하게 사용하기(BaseActivity, BaseFragment) 본문
안드로이드(Android)/코틀린(Kotlin)
[Android] DataBinding 편하게 사용하기(BaseActivity, BaseFragment)
리안94 2021. 1. 23. 14:55데이터 바인딩을 사용하다 보면 매번 액티비티나 프래그먼트마다 이렇게 만들어야 한다.
class MainActivity : AppCompatActivity(){
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
}
}
class FragmentMain :Fragment() {
private lateinit var binding: FragmentMainBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false)
return binding.root
}
}
한두 개면 상관없지만 프로젝트가 커지다 보면 불편함이 느껴질 수 있다.
그럴 때면 다음과 같이 만들어주면 편하게 사용 가능하다.
open class BaseAppCompatActivity<T: ViewDataBinding>(@LayoutRes val layoutRes: Int) : AppCompatActivity(){
lateinit var binding: T
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, layoutRes)
binding.onCreate()
}
open fun T.onCreate() = Unit
}
open class BaseFragment<T: ViewDataBinding>(@LayoutRes val layoutRes: Int) : Fragment(){
lateinit var binding: T
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, layoutRes, container, false)
binding.onCreateView()
binding.onViewCreated()
return binding.root
}
open fun T.onCreateView() = Unit
open fun T.onViewCreated() = Unit
}
다음과 같이 만들어주는데, 하나하나 만들면 생각보다 많은 클래스가 생성된다.
Activity, AppCompatActivity, Fragment, FragmentDialog 등등
sealed class를 사용했다.
sealed class UtilityBase{
open class BaseFragment<T: ViewDataBinding>(@LayoutRes val layoutRes: Int) : Fragment(){
lateinit var binding: T
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, layoutRes, container, false)
binding.onCreateView()
binding.onViewCreated()
return binding.root
}
open fun T.onCreateView() = Unit
open fun T.onViewCreated() = Unit
}
open class BaseAppCompatActivity<T: ViewDataBinding>(@LayoutRes val layoutRes: Int) : AppCompatActivity(){
lateinit var binding: T
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, layoutRes)
binding.onCreate()
}
open fun T.onCreate() = Unit
}
}
사용법은 다음과 같다.
1. Activity
class MainActivity : UtilityBase.BaseAppCompatActivity<ActivityMainBinding>(R.layout.activity_main) {
override fun ActivityMainBinding.onCreate() {
binding.레이아웃아이디 ....
}
}
2. Fragment
class FragmentMain :
UtilityBase.BaseFragment<FragmentMainBinding>(R.layout.fragment_main) {
override fun FragmentMainBinding.onCreateView() {
}
override fun FragmentMainBinding.onViewCreated() {
binding.레이아웃아이디....
}
}
'안드로이드(Android) > 코틀린(Kotlin)' 카테고리의 다른 글
[Android] 버튼 백그라운드 변경문제 (0) | 2021.02.19 |
---|---|
[Android] RecyclerView 스크롤시 설정 해제되는 현상(체크박스, 백그라운드색상 등)해결법 (0) | 2021.02.18 |
[Android] Recycler View - Step 4 (0) | 2021.01.19 |
[Android] Recycler View - Step 3 (0) | 2021.01.16 |
[Android] Recycler View - Step 2 (0) | 2021.01.15 |
Comments