Ich habe ein Fragment , in dem es RecyclerView
mit LinearLayoutManager
in der es CardView
Gegenstände. Beim Klicken befindet sich eine schwebende Aktionsschaltfläche, über die die Elemente nach oben scrollen sollen. Ich habe versucht, sowohl mit scrollToPosition
als auch scrollToPositionWithOffset
mit RecyclerView
und LinearLayoutManager
wie unten gezeigt zu verwenden. Aber es hat überhaupt keine Wirkung. Warum ist das so? Kann mir bitte jemand helfen.
Und ich habe die RecyclerView
direkt SwipeRefreshView
in der XML-Datei platziert. Ich rufe setFloatingActionButton
an, sobald der Adapter auf eingestellt ist RecyclerView
.
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();
}
});
}
android
android-recyclerview
SRBhagwat
quelle
quelle
mLayoutManager.scrollToPositionWithOffset(0, 0);
RecyclerView
mit Layout Manager und der wurde in einen gelegtSwipeRefreshview
, und das hat bei mir funktioniert.Antworten:
Fortsetzung von obigen Kommentaren, idealerweise ersetzen
mRecyclerView.smoothScrollToPosition(0);
in der
onClick
der schwebenden Aktionstaste mitmLayoutManager.scrollToPositionWithOffset(0, 0);
sollte arbeiten. Sie können den
SnackBar
Code auch entfernen , da Sie ihn sowieso nicht benötigen. Alles in allem sollte Ihre obige Methode also so aussehenpublic 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 das oben genannte nicht funktioniert, dann testen Sie, ob das
onClick()
überhaupt aufgerufen wird oder nicht. Fügen Sie eine Protokollnachricht hinzu und prüfen Sie, ob sie gedruckt wurde.quelle
Die Verwendung der Methode
smoothScrollToPosition()
hat bei mir mit der neuesten Android-Version funktioniert.layoutManager.smoothScrollToPosition(mRecyclerView, null, 0);
quelle
Rufen Sie 'scrollToPosition (0)' folgendermaßen auf:
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); } } }); } }
quelle
In meinem Fall bestand die Anforderung darin, die Ansicht in umgekehrter Reihenfolge zu füllen, wodurch das Layout die Unteransicht der Bildlaufansicht zeigte
layoutManager.smoothScrollToPosition(mRecyclerView, null, 'last_index')
hat nicht wirklich geholfen.Mein Problem wurde behoben, als ich die Recycler-Ansicht machte, um das Kind an der letzten Position zu zeigen
recyclerView.scrollToPosition(length-1)
quelle