기록

[Bug] onMenuItemSelected에서 이전 값을 참조하는 현상 본문

[Study]/Android

[Bug] onMenuItemSelected에서 이전 값을 참조하는 현상

Dannnnnn 2022. 9. 24. 04:46
반응형
val menuHost: MenuHost = requireActivity()
        menuHost.addMenuProvider( object : MenuProvider {
            override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
                menuInflater.inflate(R.menu.selected_note_menu, menu)
            }

            override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
                when (menuItem.itemId) {
                    R.id.delete_menu -> {
                        viewModel.deleteNote(note)
                        navController.navigateUp()
                    }
                    else -> return false
                }
                return true
            }

        })

 

menuHost는 연관 Activity의 context를 받는다.

위 코드는 onCreateView()에서 사용되고 있는데 해당 프래그먼트가 파괴되어도 menuHost는 Actvity단을 참조하기 때문에 파괴되지 않아서 프래그먼트를 나갔다 돌아와도 계속 살아있는 것으로 보인다.

 

한번만 사용하려 했던 MenuProvider 익명 객체를 onDestroyView()에서 재사용하기 위해 inner class로 따로 빼주고 MenuProvider를 직접 파괴하니 해결되었다.

 

override fun onDestroyView() {
        super.onDestroyView()
        val menuHost: MenuHost = requireActivity()
        menuHost.removeMenuProvider(menuProvider)
    }​

 

 

requireActivity() 정리 잘 된 블로그

https://velog.io/@dabin/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CFragment%EC%97%90%EC%84%9C-Activity%EC%9D%98-Context%EC%96%BB%EA%B8%B0getActivityrequireActivity-requireContextgetContext

반응형