J'ai un fragment dans lequel il y a RecyclerView
avec LinearLayoutManager
dans lequel il y a des éléments CardView
. Il y a un bouton d'action flottant en cliquant sur lequel les éléments doivent défiler vers le haut. J'ai essayé d'utiliser scrollToPosition
ainsi que scrollToPositionWithOffset
avec RecyclerView
et aussi avec LinearLayoutManager
comme indiqué ci-dessous. Mais cela n'a aucun effet. Pourquoi cela est-il ainsi? Est-ce que quelqu'un peut m'aider s'il vous plait.
Et j'ai placé la RecyclerView
directement à l'intérieur de la SwipeRefreshView
dans le fichier xml. J'appelle setFloatingActionButton
dès que l'adaptateur a été configuré pour 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();
}
});
}
En partant des commentaires ci-dessus, idéalement, remplacer
mRecyclerView.smoothScrollToPosition(0);
dans la onClick
du bouton d'action flottante avec
mLayoutManager.scrollToPositionWithOffset(0, 0);
devrait marcher. Vous pouvez également supprimer le code SnackBar
, car vous n'en avez de toute façon pas besoin. Donc, dans l’ensemble, votre méthode ci-dessus devrait ressembler à
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);
}
});
}
Et si vous dites que cela ne fonctionne pas, vérifiez si la fonction onClick()
est appelée ou non. Essayez d’ajouter un message de journal et de voir s’il est imprimé.
Utiliser la méthode smoothScrollToPosition()
a fonctionné pour moi avec la dernière version d'Android.
layoutManager.smoothScrollToPosition(mRecyclerView, null, 0);
Appelez 'scrollToPosition (0)' en utilisant ceci:
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);
}
}
});
}
}
Dans mon cas, l'exigence était de renseigner la vue dans l'ordre inverse, ce qui a permis à la présentation de afficher la vue de dessous de la vue de défilement. n'a pas vraiment aidé. mon problème résolu lorsque j'ai créé la vue Recycler pour montrer l'enfant à la dernière position . recyclerView.scrollToPosition (longueur-1);