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가지만 가져왔고 나머지 기능들도 의미가 있는것 같다.

나머지는 미디엄 링크를 참고!!

 

 

반응형