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