Dev/Android
AndroidX 로 바뀌면서 Activity, Fragment 에 유용한 작업 기능
healthyryu
2021. 6. 29. 12:11
참고 한 Medium 글
How AndroidX changes the way we work with Activities and Fragments
Over the last couple of months, many improvements to the Activity/Fragment APIs have been introduced via the AndroidX packages.
medium.com
1. Fragment 에서 OnBackPressed 관리
class MyFragment : Fragment() {
override fun onAttach(context: Context) {
super.onAttach(context)
val callback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// Do something
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}
}
여기서 당연하게 Activity 로 BackPressed 를 연결 시키려면 BackPressed 추가하면 된다
requireActivity().onBackPressed()
더이상(이미 다들 알고 있겠지만...) 추상화 메서드 만들어서 BackPressed 를 연결하지 않아도 된다.
2. FragmentTransaction 처리
// Before
supportFragmentManager
.beginTransaction()
.add(R.id.container, MyFragment::class.java, null)
.commit()
// After
supportFragmentManager.commit {
replace<MyFragment>(R.id.container)
}
하단(After)의 FragmnetManager 의 commit 함수를 보면 아래와 같이 구현되어 있다.
public inline fun FragmentManager.commit(
allowStateLoss: Boolean = false,
body: FragmentTransaction.() -> Unit
) {
val transaction = beginTransaction()
transaction.body()
if (allowStateLoss) {
transaction.commitAllowingStateLoss()
} else {
transaction.commit()
}
}
commit() 호출할때 allowStateLoss 에 true 를 주면 commitAllowingStateLoss() 로 진행한다.
개인적으로 편하다고 생각한 2가지만 가져왔고 나머지 기능들도 의미가 있는것 같다.
나머지는 미디엄 링크를 참고!!
반응형