마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

bottomnavigationview 프래그먼트 상태유지

0 추천

액티비티 oncreate에서 이렇게

NavigationUI.setupWithNavController(binding.navBar, findNavController(R.id.nav_host))

bottomnavigationview를 이융해서 바텀네비를 구현했는데

A, B 프래그먼트가 있다할때, A -> B -> A로가면 A가 재생성되면서 리사이클러뷰에 뿌려놓은 데이터들이 다날라갑니다

A가 안날라가게 상태유지할 방법이 없나요?

 

수원통학러 (3,570 포인트) 님이 2023년 9월 9일 질문

1개의 답변

0 추천

2.5 였던가(정확하지는 않습니다.) 그 버전 부터는 multistack 이라고 해서 Bottom navigation 간에 전환을 해도 기존 데이터를 보존해주도록 변경이 되었습니다.

아래링크의

https://developer.android.com/jetpack/androidx/releases/navigation

Multiple back stacks 섹션을 보시면 해당 설명이 나옵니다.

그리고 요즈의 안드로로이드 아키텍쳐는 뷰와는 별개로 ViewModel + SavedStateHandle 을 통해서 뷰의 상태를 복구할 수 있도록 처리하는게 일반적입니다. 따라서 님의 경우에는 리사이클러뷰에 있는 데이터를 onViewCreate이후에 위치시키고 다른 곳으로 이동했다가 원래  Fragment로 돌아올 때 onViewCreated 과 같은 곳에서 데이터를 다시 가져와서 보여주게 하면 쉽게 해결이 될 것 같습니다.

spark (227,530 포인트) 님이 2023년 9월 13일 답변
해당 주신 링크보고
    app:popUpToSaveState="true"
            app:restoreState="true"
를 추가해줬는데 저장되지 않네요 네비게이션은 2.5.3 안정화버전을쓰고있습니다
스택오버플로도 같은 사람이 있는데 해결책은 안보이고 혹시 아시는거 없을까요?
    <action
            android:id="@+id/action_bucketFragment_to_searchFragment"
            app:destination="@id/searchFragment"
            app:popUpTo="@+id/searchFragment"
            app:popUpToInclusive="true"
            app:popUpToSaveState="true"
            app:restoreState="true" />
<action
            android:id="@+id/action_bucketFragment_to_searchFragment"
            app:destination="@id/searchFragment"
          
            app:restoreState="true"
            app:popUpToSaveState="true"/>

popUpToInclusive 이게 스택을 지우는거라고해서 빼봐도 똑같습니다.
님이 코드를 어떻게 작성하고 있는지에 따라 해당 동작의 원인과 해결책이 다를 것 같네요. 저도 네비게이션 컴포넌트를 오랫동안 사용해왔고 님과 같은 문제가 있던 적도 있었는데, 그건 네비게이션 컴포넌트 문제가 아니라 제 코드에서 라이프사이클 처리가 안되어서 그런 경우가 대부분이었어요. 라이프사이클 처리부분을 특히 잘 살펴보세요.
...