J'utilise recyclerview pour afficher des messages dans une fenêtre de discussion. Cependant, lorsqu'un nouveau message est en cours de modification, le focus de la vue du recycleur doit être sur le dernier élément. Je m'attends à ce qu'il y ait un moyen de déplacer le focus d'une vue d'ensemble du recyclage sur le dernier élément au lieu du premier.
utilisez recyclerView.smoothScrollToPosition(position);
position est votre index du dernier élément inséré. Cela déplacera votre focus RecyclerView
sur le dernier élément.
Utilisez peut ajouter l'une des deux lignes de votre objet LinearLayoutManager pour faire défiler votre vue d'ensemble vers le bas ...
llm.setStackFromEnd(true);
OR
llm.setReverseLayout(true);
Utilisation
recyclerView.smoothScrollToPosition(position)
adapter.notifyDataSetChanged();
où position est l'indice du dernier élément
recyclerView.getAdapter().getItemCount()-1
utilisez-le pour obtenir le dernier élément.
Cela a fonctionné pour moi.
Assurez-vous que cette position est la position de l'élément que vous souhaitez afficher.
recyclerView.smoothScrollToPosition(position);
Vous pouvez utiliser app: stackFromEnd = "true" dans votre code XML de vue recycleur comme:
<Android.support.v7.widget.RecyclerView
Android:id="@+id/message_list"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_above="@id/message_input"
Android:layout_alignParentTop="true"
app:stackFromEnd="true" />
Vous pouvez procéder de deux manières.
1: Lorsque vous créez un LayoutManager pour RecyclerView, définissez le dernier paramètre dans son constructeur comme true
.
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.HORIZONTAL,true);
2: dites simplement à RecyclerView de défiler jusqu'à la dernière position.
recyclerView.smoothScrollToPosition(lastPosition);