fragment에서 menu를 연결하던 과정에서 setHasOptionsMenu(true) 이 부분이 deprecated 가 되어서 함수를 타고 들어가니 deprecated 되었으니 MenuProvider를 사용하라고 적혀있어 공식문서에 적혀있는대로 만드는 과정을 기록하겠습니다.
setHasOptionsMenu(true)
return fragmentListBinding.root
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.list_fragment_menu,menu)
}
}
requireActivity()는 현재 Fragment가 속한 Activity를 반환하는 메서드입니다.MenuHost는 requireActivity()가 반환하는 Activity 객체를 저장할 수 있는 타입입니다.requireActivity()가 반환하는 Activity를 menuHost 변수에 할당하여 Activity에 대한 참조를 유지합니다.menuHost가 addMenuProvider() 메서드를 호출하여 익명 객체로 구현을 하고 implement 해주면 onCreateMenu(), onMenuItemSelected() 메서드를 구현해줍니다. 이름에도 나와있듯이 메뉴를 초기화하고 생성하는 메서드와 메뉴 항목을 선택되었을때 호출되는 메서드입니다.class ListFragment : Fragment() {
lateinit var fragmentListBinding: FragmentListBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
fragmentListBinding = FragmentListBinding.inflate(layoutInflater)
val menuHost: MenuHost = requireActivity()
menuHost.addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.list_fragment_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return true
}
}, viewLifecycleOwner, Lifecycle.State.RESUMED)
return fragmentListBinding.root
}
}
참고문서 : https://developer.android.com/jetpack/androidx/releases/activity#1.4.0-alpha01