Navigation Component prevent to recreate fragment on back press

android navigation component save fragment state
android navigation component replace fragment
android navigation component back button
android navigation component backstack
android navigation component clear back stack
back button navigation in fragment android
android bottom navigation save fragment state
navigation component reload fragment

I'm using the Jetpack Navigation Component in my project with a single activity and some fragments.

I have a fragment with a list that fills from server side. I call getDataFromServer on the onViewCreated method then, when a user clicks on an item, a new fragment shows.

The problem is that when I press the back button, onViewCreated is called again in my list fragment.

So, how can I prevent my first fragment from recreating again? I don't want unnecessary onViewCreated calls.

Maybe you have activate the graph.

app:popUpTo="@+id/nav_fingerprint_capture"
app:popUpToInclusive="true"

Navigate Back with Navigation Component - Michael Spitsin, As we all know, Google introduced Navigation Components some time ago. But there is small problem: we can not go back to specific fragment… to the third fragment, and then press a button to navigate back to the first That happens because first fragment is getting deleted and recreate from scratch. I'm trying to use an unique activity that contain navigation view and their option will open another fragment. Everything is ok, unless the MainFragment is being recreated when back from another fragment (that was opened from the navigation view). I'd like to know how to avoid this because it's loading the list again. MainActivity:

You can't prevent calling onViewCreated method or any method of your fragment when back button pressed so you should better use view model with your list fragment and get data from server in your view model. Avoid getting data from server in your fragment since you already using Navigation UI.

Nav-Framework is nice, however, it create fragment's view every , When the user goes back all the previous state is lost. When later on you press back, it navigates up, popping the DetailsFragment and leaving the data in ViewModel and inflate layout with that data when fragment recreate. Android navigation component is suck, Better switch to old school method. There's one fragment that has a recyclerview, the more I scroll the more API requests are made. Whenever I press one item to navigate to a different fragment and press back to return to the list, the list only has a small piece of the previous loaded recyclerview, I want everything.

Of course, we can not prevent calling oncrateView, but there is a simple way. Instead of calling view.loadData() in onCreateView or other lifecycle methods we can call it while initializing ViewModel

this article helped me to know ViewModel better 5 common mistakes when using Architecture Components

Navigation, Saving fragment state · Issue #530 · android/architecture , Hi, I'm was trying to save fragment state, Is there a suggested way to use while I want when I pop fragments from backstack, they are not recreate view I'm using dialog fragment in the one of the navigation component nav graphs That's entirely separate from multiple back stacks and saving the state of  Stack Overflow Public questions and answers; Teams Private questions and answers for your team; Enterprise Private self-hosted questions and answers for your enterprise; Jobs Programming and related technical career opportunities

Provide custom back navigation, This usually allows Android to properly navigate to previous destinations when the Back button is pressed. However, there are a few cases  Note: to prevent the Activity from recreating itself when the back button is clicked, you have to make the launchMode your “fragment hosting class” or MainActivity.java class singleTop.

NavHostFragment, android:name="androidx.navigation.fragment. This includes the navigation graph as well as navigation state such as current location and back stack that will​  In the New Android Component dialog that appears, create your fragment. For more information on fragments, see the fragment documentation. Back in the Navigation Editor, notice that Android Studio has added this destination to the graph. Figure 3 shows an example of a destination and a placeholder destination. Figure 3. A destination and a

Instagram style navigation using Navigation Component, You can jump from explore to your profile, and back to explore, and the initial state implementation "android.arch.navigation:navigation-fragment-ktx:$​navigation_version" We would have to create a custom viewPager to disable the swipe and scroll control the backStack when back button is pressed After trying to create a project, making use of the new arch components, I noticed that one of my Fragments received more and more events from LiveData within the Observer code after navigating back and forth in the UI. This happens due to the Fragment instance being retained and popped back from the stack after "back" navigation.

Comments
  • use onActivityCreated function by overriding it in the fragment of yours and get your getDataFromServer there maybe!
  • @Rizwanatta it is a good trick, I'll do it, but I'm waiting for maybe better answers to .thanks
  • Since you are using Navigation Component, you should probably use ViewModels aswell. It makes live much more easier
  • This is why they invented ViewModel + fragment.getViewLifecycleOwner().
  • You can take some inspiration from NetworkBoundResource, where it is an effect of observing the LiveData inside the ViewModel
  • so where should I tell to ViewModel to get the data?
  • In view model class. maybe you learn about view model it's a better approach.
  • I mean in fragment where should I tell to view model? I have pagination too. ok in my view model I get the data, but when fragment recreate again in the onViewCreated method I tell ViewModel to get the data, and it gonna get it, but I have it, and also I have pagination, How can I know that getting data is for pagination or not?
  • look at this gist viewmodel and mainFragment