RecyclerView faites défiler jusqu'à la position lorsqu'un nouvel élément est ajouté
Je veux que mon RecyclerView pour faire défiler vers le bas lorsqu'un nouvel élément est ajouté à la liste. Ci-dessous mon code:
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapter = new RecyclerViewAdapter(data, recyclerView);
recyclerView.setAdapter(adapter);
Et quand je clique sur un bouton qui est au-dessous de la RecyclerView
, les données sont ajoutées à la liste:
public void addNewCard() {
data.add("New");
adapter.notifyItemInserted(data.size() - 1);
recyclerView.scrollToPosition(data.size() - 1);
}
Chaque fois que j'ajoute un élément, il est toujours défile jusqu'à la première position. J'ai essayé d'utiliser smoothScrollToPosition()
et essayé d'utiliser scrollToPosition()
sur LinearLayoutManager
trop. J'ai même essayé d'utiliser ViewTreeObserver
. Essayé de changer la version de RecyclerView
dans les dépendances. J'ai cherché à fond sur Stack Overflow, et aucune des solutions de travail pour moi.
Toutes les idées sur ce que pourrait être le problème? Je suis en utilisant RecyclerView
à l'intérieur d'un fragment. Pourrait-ce être une cause du problème?
Mon .fichier xml pour la RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll_view_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rel_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp" />
<Button
android:id="@+id/button_add_new_card"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/listView"
android:layout_marginBottom="16dp"
android:layout_marginTop="8dp"
android:padding="20dp"
android:text="+ Add new Item" />
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
oui, je suis de l'utiliser à l'intérieur d'un RelativeLayout qui est à l'intérieur d'un ScrollView
Ensuite, essayez d'utiliser NestedSrollView au lieu de le ScrollView. Ou utiliser cette méthode pour RecyclerView layoutManager.setStackFromEnd(true);
essayé les deux. Ne fonctionne pas! 🙁
Êtes-vous à l'aide de GridLayoutManager? Dans ce cas, il ne prendra pas en charge setStackFromEnd().
OriginalL'auteur Arshad Yusuf | 2017-11-12
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez ajouter les données au bas de la liste que vous devez utiliser
setStackFromEnd()
dans RecyclerView Layout Manager.Mais d'abord, vous avez besoin pour réparer votre Adaptateur. Vous ne devez pas passer votre RecylerView à votre Carte. Ainsi, le code suivant est faux:
Vous avez besoin de changer votre constructeur d'Adaptateur pour recevoir uniquement les données comme paramètre. Quelque chose comme ceci:
Ensuite, vous pouvez définir les données à toujours ajoutés à la dernière en bas avec le code suivant:
Pour ajouter les nouvelles données, vous feriez mieux de faire une nouvelle méthode dans l'adaptateur. Quelque chose comme ceci:
Chaque fois que vous avez ajout d'une nouvelle donnée, vous devez faire défiler vers le bas avec
scrollToPosition
méthode. Quelque chose comme ceci:N'oubliez pas que vous devez remplacer
getItemCount()
dans votre Carte. Il devrait être quelque chose comme ceci:S'il vous plaît être conscient que je suis de Données à l'aide d'un pojo comme un exemple ici. Vous avez besoin de les modifier en fonction de votre type de données.
Ce qui ne fonctionne pas? pouvez-vous créer un projet simple, juste que pour le RecyclerView et l'adaptateur. Je suis en utilisant le code ci-dessus dans mon projet.
J'ai ajouté mon .fichier xml, y compris les
RecyclerView
. Pouvez-vous voir si il y a un problème avec elle?Vous êtes de droite. J'ai créé un projet simple et fit de même avec
RecyclerView
etRecyclerView.Adapter
. Il fonctionne très bien. Apparemment, le problème est ailleurs. Je vais le regarder. Merci pour votre temps!Merci beaucoup!
OriginalL'auteur ישו אוהב אותך
ישו אוהב אותך la solution travaillé sur d'autres projets. Mais la mise en
recyclerView.scrollToPosition()
ne fonctionne pas pour moi. C'est ce qui a finalement fait le job:OriginalL'auteur Arshad Yusuf
Peut-être que cela aidera quelqu'un
est encore plus rapide
OriginalL'auteur Koala
J'ai eu le même problème. Lors de l'ajout d'un élément à mon RecyclerView, le recyclerView n'était pas le défilement de l'élément qui est le plus bas.
Mais ça a fonctionné pour moi.
L'astuce est d'utiliser le
scrollToPosition()
méthode dans le bon endroit.OriginalL'auteur Niamatullah Bakhshi