2017-07-05 5 views
0

Ich habe Probleme beim Implementieren von Smooth Scroll mit einem RecyclerView, wenn es mit AppBarLayout gekoppelt ist. Das ist mein Layout:RecyclerView startSmoothScroll() falscher Scroll-Betrag mit AppBarLayout?

<CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content""> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:background="#ff0000" 
      app:layout_scrollFlags="scroll|enterAlways|snap" /> 
    </AppBarLayout> 

    <RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

</CoordinatorLayout> 

Ich versuche, wie so in eine Position zu bewegen:

RecyclerView.SmoothScroller ss = new LinearSmoothScroller(getActivity()) { 
     @Override protected int getVerticalSnapPreference() { 
      return LinearSmoothScroller.SNAP_TO_END; 
     } 
    }; 
ss.setTargetPosition(position); 
llm.startSmoothScroll(ss); 

Es gibt zwei Probleme:

  1. Wenn die Zielposition von der Unterkante In der Recycler-Ansicht ist der Scroll-Betrag nicht korrekt - er wird um die Höhe des AppBarLayouts versetzt. Wenn ich zu SNAP_TO_START ändere, dann funktioniert es gut. Oder, wenn ich das AppBarLayout entferne, funktioniert es in allen Fällen gut.

  2. Der Versuch, zum letzten Element in der Recycler-Ansicht zu scrollen, ist auf andere Arten unterbrochen. Das Flag SNAP_TO_START funktioniert normalerweise einwandfrei (siehe # 1), aber in diesem Fall verweigert die Recycleransicht das vollständige Scrollen.

Entfernen Also das AppBarLayout alles behebt, gibt es einige zusätzliche Einstellung erforderlich bei der Verwendung dieses mit AppBarLayout? Ich bin auf der neuesten Support-Bibliothek Version.

Dank

Antwort

0

Bitte benutzen Sie smoothScrollToPosition Ihr Problem, wie unten zu beheben.

RecyclerView rv = (RecyclerView)findViewById(R.id.recyclerView); 
rv.smoothScrollToPosition(mMessages.count-1); 
+0

Ja, aber ich möchte das Snap-Verhalten zu steuern - ich möchte in der Lage sein, Snap zu starten oder zu beenden. Ich glaube, 'smoothScrollToPosition()' garantiert nicht, dass das Objekt sogar vollständig sichtbar ist! - habe es auch gerade ausprobiert, zeigt aber immer noch das gleiche defekte Verhalten, wenn 'AppBarLayout' vorhanden ist. – r45

Verwandte Themen