이제 툴바를 추가해줄 차례다. ListFragment
와 DetailFragment
가 사용할 툴바의 기능 및 아이콘 갯수가 다른 만큼, 액티비티에 기본적으로 배치를 하되 각 Fragment에 진입할 때 메뉴의 수정이 필요할 것이다.
우선 resource에 menu를 추가해준다. (리소스 추가하는 방식과 동일하게, menu로 만들겠다고 선택하면 디렉토리는 알아서 설정해준다.)
리스트 메뉴와 디테일 메뉴를 각각 만들었다.
list_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/list_settings"
android:icon="@drawable/ic_settings"
android:title="설정"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/list_more"
android:icon="@drawable/ic_baseline_more_vert"
android:title="더보기"
app:showAsAction="ifRoom|withText"/>
</menu>
공식문서에서 setHasOptionsMenu(true)
를 설정해주래서 해줬더니 Deprecated 되었다고 뜬다! 아니 공식아!!!
검색을 해보니, 2021.9월에 배포된 Jetpack Version 1.4.0-alpha01에 해당 언급이 있다. 링크는 아래에.
https://developer.android.com/jetpack/androidx/releases/activity#1.4.0-alpha01
addMenuProvider()
를 사용하라는 것이다. 생명주기를 알고 있다고 하는 듯하다. 하라는대로 일단 ListFragment
에 적용해보기로 했다.
메뉴야 항상 보이겠지만, 일단 RESUME 상태일 때를 나중에 핸들링할 경우가 있을 때 이런 방식도 있다, 하고 기록해두기 위하여 옵셔널하게 적용하였다.
ListFragment.kt
override fun onCreateView(...) {
...
(requireActivity() as MenuHost).addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.list_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
when(menuItem.itemId) {
R.id.list_settings -> {
}
R.id.list_more -> {
}
}
return true
}
}, viewLifecycleOwner, Lifecycle.State.RESUMED)
}
'개발일기' 카테고리의 다른 글
8월 한달 토이 프로젝트를 해보자! -08 : LogIn Data Binding & ViewModel (0) | 2022.08.10 |
---|---|
8월 한달 토이 프로젝트를 해보자! -07 : submenu (0) | 2022.08.09 |
8월 한달 토이 프로젝트를 해보자! -05 : Adapter Click (0) | 2022.08.09 |
8월 한달 토이 프로젝트를 해보자! -04 : List UI (0) | 2022.08.09 |
8월 한달 토이 프로젝트를 해보자! -03 : LogIn UI (0) | 2022.08.08 |