이제 ... 을 눌렀을 때 하위 메뉴가 나타나도록 설정해주면 되겠다. FragmentList
에서 우선 SubMenu를 만들어줄 것이다.
list_sub_menu.xml
이라는 menuItems를 만들어준 다음, FragmentList
에 다음과 같이 inflate 해줄 것이다. Fragment에 PopupMenu.OnMenuItemClickListener
를 상속해두어 활용해주자.
FragmentList.kt
private fun showPopUp(v: View) {
PopupMenu(requireActivity(), v, Gravity.RIGHT)
.apply {
setOnMenuItemClickListener(this@ListFragment)
inflate(R.menu.list_submenu)
show()
}
}
...
override fun onMenuItemClick(item: MenuItem?): Boolean {
return when(item?.itemId) {
R.id.list_sub_write -> {
true
}
R.id.list_sub_logout -> {
true
}
else -> false
}
}
list_more
의 리스너에 위의 showPopUp
을 추가해준 다음 테스트 해보면, 리스트가 뜸을 볼 수 있다.
그런데, 왜 한 번에 하나만 떠서 스크롤을 해야 할까??? 왜지??
- 그런데 뭐여.
DetailFragment
들어갔다가 돌아오니까 메뉴가 저렇게 되어있었다. 클릭 리스너도 안 먹힌다. 무슨 일이지?
왔다갔다 반복할수록 ... 개수가 늘어난다!!! 메뉴가 점점 쌓이고 있는 것이다!
아 이게 컨텍스트가 requireActivity()
여서 그런가? 흠... 맞는 것 같은데?
1, requireActivity().invalidateOptionsMenu()
onCreateView에서 안 먹힘.
2. requireActivity().invalidateMenu()
onCreateView에서 안 먹힘.
3. 오예 성공!! 아래 서술하겠다.
해결한 방법 (드러운 것 같음)
드럽다... 생각은 들지만, 일단은 이게 성공했으니 기록해둔다. 각 Fragment에 private lateinit var menuProvider: MenuProvider
변수를 만들어준 후, onCreateView
에서 위의 object : MenuProvider...
해줬던 부분을 부여해준다.
menuProvider = object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.detail_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.detail_more -> {
}
}
return true
}
}
(requireActivity() as MenuHost).addMenuProvider(menuProvider)
이후 onStop()
에서 (requireActivity() as MenuHost).removeMenuProvider(menuProvider)
을 해주면, 메뉴가 겹치지 않고 말끔하게 뜬다. (코드단은 더러운 것 같아)
새 포스트 작성에 대한 Fragment, 설정에 대한 Fragment가 이제 필요하고, 또 submenu에 기능을 달아주는 것이 필요하겠지만, 일단은 역시 메인스트림에 집중하자. 다음 작업으로 바로 이제 LogIn, List, Detail에 대해 Data Binding + LiveData 관련 작업에 들어갈 수 있겠다.
'개발일기' 카테고리의 다른 글
8월 한달 토이 프로젝트를 해보자! -09 : Adapter 높이 programmatically 설정해주기 (0) | 2022.08.10 |
---|---|
8월 한달 토이 프로젝트를 해보자! -08 : LogIn Data Binding & ViewModel (0) | 2022.08.10 |
8월 한달 토이 프로젝트를 해보자! -06 : AppBar (0) | 2022.08.09 |
8월 한달 토이 프로젝트를 해보자! -05 : Adapter Click (0) | 2022.08.09 |
8월 한달 토이 프로젝트를 해보자! -04 : List UI (0) | 2022.08.09 |