Come salvare la posizione di scorrimento di RecyclerView in Android?

Ho Recycler vista che si trova all'interno di SwipeRefreshLayout. Inoltre, hai la possibilità di aprire each elemento in un'altra attività. Dopo il return al riciclatore ho bisogno di scorrere l'elemento selezionato, o quello precedente Y. Come farlo?

Sì, ho googled, ho trovato articoli in StackOverFlow sul salvataggio dell'istanza del gestore di layout, come questo: lo stato RecyclerView store / restore tra le attività . Ma, non mi aiuta.

  • Non c'è spazio sul dispositivo - android
  • Come installare Appium su Mac OS per eseguire test automatizzati dalle classi JAVA su dispositivi Android e iOS
  • Consumo di energia di Android App
  • Bordo per una visualizzazione di immagini in Android?
  • Analisi xml di Android
  • Libreria Barra Azione AppCompat che non visualizza frammenti aggiunti
  • AGGIORNARE

    Adesso ho questo tipo di problema, ma naturalmente non funziona.

    private int scrollPosition; ...//onViewCreated - it is fragment recyclerView.setHasFixedSize(true); LinearLayoutManager llm = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(llm); data = new ArrayList<>(); adapter.setData(getActivity(), data); recyclerView.setAdapter(adapter); ... @Override public void onResume() { super.onResume(); recyclerView.setScrollY(scrollPosition); } @Override public void onPause() { super.onPause(); scrollPosition = recyclerView.getScrollY(); } 

    Sì, ho provato scrollTo (int, int) – non funziona.

    Ora ho provato a scorrere, per esempio, a Y = 100, ma non scorreva affatto.

  • Come installare il client di posta elettronica sull'emulatore
  • Il clic non funziona nell'elenco Listitem android
  • Come impostare il bordo di GridView su Android
  • Come leggere gli attributi personalizzati del tag di messaggi xmpp in android?
  • Android google maps v2 si blocca all'avvio
  • Android ICS 4.0 NDK NewStringUTF sta crollando l'App
  • 4 Solutions collect form web for “Come salvare la posizione di scorrimento di RecyclerView in Android?”

    Salva lo stato attuale della posizione di riciclo @onPause:

      positionIndex= llManager.findFirstVisibleItemPosition(); View startView = rv.getChildAt(0); topView = (startView == null) ? 0 : (startView.getTop() - rv.getPaddingTop()); 

    Ripristina la posizione di scorrimento @onResume:

      if (positionIndex!= -1) { llManager.scrollToPositionWithOffset(positionIndex, topView); } 

    o un altro modo può essere @onPause:

     long currentVisiblePosition = 0; currentVisiblePosition = ((LinearLayoutManager)rv.getLayoutManager()).findFirstCompletelyVisibleItemPosition(); 

    ripristina @onResume:

     ((LinearLayoutManager) rv.getLayoutManager()).scrollToPosition(currentVisiblePosition); currentVisiblePosition = 0; 

    L'utente del tuo recycler vede linearlayoutmanager per get la posizione di scorrimento

     int position = 0; if (linearLayoutManager != null) { scrollPosition = inearLayoutManager.findFirstVisibleItemPosition(); } 

    e quando ripristina l'uso seguendo il codice

     if (linearLayoutManager != null) { cardRecyclerView.scrollToPosition(mScrollPosition); } 

    Spero che questo ti aiuti

    Molte di queste risposte sembrano complicarsi.

    LayoutManager support onRestoreInstanceState fuori dalla window, quindi non è necessario salvare le posizioni di scorrimento ecc. Il metodo incorporato già salva le posizioni perfette per il pixel.

    esempio codice frammento (controllo nullo ecc. rimosso per chiarezza):

     private Parcelable listState; private RecyclerView list; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); listState=savedInstanceState.getParcelable("ListState"); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("ListState", list.getLayoutManager().onSaveInstanceState()); } 

    basta call

     list.getLayoutManager().onRestoreInstanceState(listState); 

    una volta che i tuoi dati sono stati ricollegati al tuo RecyclerView

    È ansible utilizzare scrollToPosition o smoothScrollToPosition per scorrere fino a qualsiasi posizione di elemento in RecyclerView .

    Se si desidera scorrere fino alla posizione dell'elemento nell'adattatore , è necessario utilizzare la function scrollToPosition o smoothScrollToPosition .

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.