title: Keeping states of recyclerview in fragment with paging library and navigation architecture component
body: <p>I'm using 2 components of the jetpack: Paging library and Navigation.</p>
  
  <p>In my case, I have 2 fragment: ListMoviesFragment &amp; MovieDetailFragment</p>
  
  <p>when I scroll a certain distance and click a movie item of the recyclerview, MovieDetailFragment is attached and the ListMoviesFragment is in the backstack. Then I press back button, the ListMoviesFragment is bring back from the backstack.</p>
  
  <p>The point is scrolled position and items of the ListMoviesFrament are reset exactly like first time attach to its activity. so, how to keep states of recyclerview to prevent that?</p>
  
  <p>In another way, how to keep states of whole fragment like hide/show a fragment with FragmentTransaction in traditional way but for modern way(navigation)</p>
  
  <p>My sample codes:</p>
  
  <p>fragment layout:</p>
  
  <pre><code>&lt;FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:tools="http://schemas.android.com/tools"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           tools:context="net.karaokestar.app.SplashFragment"&gt;
  
  &lt;TextView
          android:id="@+id/singer_label"
          android:layout_width="wrap_content" android:layout_height="wrap_content"
          android:text="Ca sĩ"
          android:textColor="@android:color/white"
          android:layout_alignParentLeft="true"
          android:layout_toLeftOf="@+id/btn_game_more"
          android:layout_centerVertical="true"
          android:background="@drawable/shape_label"
          android:layout_marginTop="10dp"
          android:layout_marginBottom="@dimen/header_margin_bottom_list"
          android:textStyle="bold"
          android:padding="@dimen/header_padding_size"
          android:textAllCaps="true"/&gt;
  
  
  &lt;androidx.recyclerview.widget.RecyclerView
          android:id="@+id/list_singers"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"/&gt;
  </code></pre>
  
  <p></p>
  
  <p>Fragment kotlin code:</p>
  
  <pre><code>    package net.karaokestar.app
      import android.os.Bundle
      import android.view.LayoutInflater
      import android.view.View
      import android.view.ViewGroup
      import androidx.fragment.app.Fragment
      import androidx.lifecycle.LiveData
      import androidx.lifecycle.Observer
      import androidx.navigation.fragment.findNavController
      import androidx.paging.LivePagedListBuilder
      import androidx.paging.PagedList
      import androidx.recyclerview.widget.LinearLayoutManager
      import kotlinx.android.synthetic.main.fragment_splash.*
      import net.karaokestar.app.home.HomeSingersAdapter
      import net.karaokestar.app.home.HomeSingersRepository
  
      class SplashFragment : Fragment() {
  
          override fun onCreateView(
              inflater: LayoutInflater, container: ViewGroup?,
              savedInstanceState: Bundle?
          ): View? {
              // Inflate the layout for this fragment
              return inflater.inflate(R.layout.fragment_splash, container, false)
          }
  
          override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
              super.onViewCreated(view, savedInstanceState)
              val singersAdapter = HomeSingersAdapter()
              singersAdapter.setOnItemClickListener{
  findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToSingerFragment2())
  }
              list_singers.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
              list_singers.setHasFixedSize(true)
              list_singers.adapter = singersAdapter
  
              getSingersPagination().observe(viewLifecycleOwner, Observer {
                  singersAdapter.submitList(it)
              })
          }
  
          fun getSingersPagination() : LiveData&lt;PagedList&lt;Singer&gt;&gt; {
              val repository = HomeSingersRepository()
              val pagedListConfig = PagedList.Config.Builder().setEnablePlaceholders(true)
                  .setPageSize(Configurations.SINGERS_PAGE_SIZE).setPrefetchDistance(Configurations.SINGERS_PAGE_SIZE).build()
  
              return LivePagedListBuilder(repository, pagedListConfig).build()
          }
      }
  </code></pre>