2015-08-22 16 views
29

Ich habe ein Fragment, in dem es RecyclerView mit LinearLayoutManager gibt, in dem CardView Elemente sind. Es gibt eine schwimmende Aktionsschaltfläche beim Klicken auf welche die Elemente nach oben blättern sollen. Ich habe versucht mit scrollToPosition sowie scrollToPositionWithOffset mit RecyclerView und auch mit LinearLayoutManager wie unten gezeigt. Aber es hat überhaupt keine Wirkung. Warum ist das so? Kann mir bitte jemand helfen.Nach oben scrollen in RecyclerView mit LinearLayoutManager

Und ich habe die RecyclerView direkt in der SwipeRefreshView in der XML-Datei platziert. Ich rufe setFloatingActionButton sobald Adapter auf RecyclerView gesetzt.

public void setFloatingActionButton(final View view) { 
    float = (android.support.design.widget.FloatingActionButton) getActivity().findViewById(R.id.float); 
    float.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
    mRecyclerView.smoothScrollToPosition(0); 


      android.support.design.widget.Snackbar.make(view, "Scrolled to Top", android.support.design.widget.Snackbar.LENGTH_SHORT) 
        .setAction("Ok", new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager(); 
          llm.scrollToPosition(0); 

         } 
        }) 
        .setActionTextColor(getActivity().getResources().getColor(R.color.coloLink)) 
        .show(); 
     } 
    }); 
} 
+0

Try 'mLayoutManager.scrollToPositionWithOffset (0, 0);' – Antrromet

+0

ja ich habe schon versucht, diese .Aber dies hat keine Auswirkung zu wie scrollToPosition. – SRBhagwat

+0

Das ist seltsam, denn sogar ich hatte ein ähnliches Layout wie Ihres. Ich hatte eine "RecyclerView" mit Layout-Manager und diese wurde in eine "SwipeRefreshview" gestellt, und das hat für mich funktioniert. – Antrromet

Antwort

69

von oben Kommentare Fortsetzung, idealerweise sollte

mRecyclerView.smoothScrollToPosition(0); 

im onClick der schwebenden Aktionstaste mit

mLayoutManager.scrollToPositionWithOffset(0, 0); 

ersetzt arbeiten. Sie können den Code SnackBar auch entfernen, da Sie ihn sowieso nicht benötigen. Also, alles in allen oben genannten Verfahren soll wie folgt aussehen

public void setFloatingActionButton(final View view) { 
    float actionButton = (android.support.design.widget.FloatingActionButton) getActivity() 
      .findViewById(R.id.float); 
    actionButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView 
        .getLayoutManager(); 
      layoutManager.scrollToPositionWithOffset(0, 0); 
     } 
    }); 
} 

Und wenn Sie sagen, dass die oben nicht funktioniert, dann testen, ob die onClick() auch genannt wird, ist oder nicht. Fügen Sie eine Protokollnachricht hinzu und prüfen Sie, ob sie gedruckt wurde.

+0

Ja, ich habe es tatsächlich bekommen, indem ich Anrufe von anderen Fragmenten für diese Methode entfernt habe. Ich habe fab creation direkt in die onCreate() -Methode platziert. – SRBhagwat

+0

Vielen Dank.Es hat geholfen :) – SRBhagwat

+0

Und mit Snackbar funktioniert es nicht. Das ist in Ordnung, da keine Snackbar benötigt wird. – SRBhagwat

3

Anruf 'scrollToPosition (0)' mit dieser:

public void scrollToPosition(final int position) { 
    if (mRecyclerView != null) { 
     getHandler().post(new Runnable() { 
      @Override 
      public void run() { 
       mRecyclerView.scrollToPosition(position); 
       if (position == 0) { 
        LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager(); 
        layoutManager.scrollToPositionWithOffset(0, 0); 
        mScrollView.fullScroll(View.FOCUS_UP); 
       } 
      } 
     }); 
    } 
} 
+0

Was ist mScrollView ..? – david

+0

private NestedScrollView mScrollView; –

3

das Verfahren unter Verwendung smoothScrollToPosition() arbeitete für mich mit der neuesten Android-Version.

layoutManager.smoothScrollToPosition(mRecyclerView, null, 0); 
Verwandte Themen