Je développe une application de chat et j'essaye de charger 10 messages à la fois, et quand l'utilisateur fait défiler vers le haut il charge 10 plus. donc j'utilisé stackFromBottom = true pour charger les messages à partir du bas:Listview charger sur défilement (Android)
<ListView
android:id="@+id/messagesList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transcriptMode="normal"
android:stackFromBottom="true">
Et j'ai un auditeur de défilement pour savoir quand l'utilisateur a atteint le sommet (firstVisibleItem == 0, soit le premier message) afin que je puisse charger plus de messages:
messagesList.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem ==0 && !loading && !startApp) {
loading = true;
skip += 10;
fetchMessages = new FetchMessages(); //load more items
fetchMessages.execute(true);
}
}
});
le problème est lorsque vous faites défiler et atteindre le sommet, 10 plus de messages charge mais le Listview défile automatiquement vers le bas. Je veux rester exactement dans la même position lorsque de nouveaux éléments sont ajoutés à la liste, comme n'importe quelle application de discussion classique.
Ceci est la méthode ajouter des messages:
@Override
protected void onPostExecute(String json) {
if(json!=null){
...
//After Parse JSON ...
chatMessageAdapter.list.add(0,chatMessage); //add the message to the top of the list
chatMessageAdapter.notifyDataSetChanged(); //listview scrolls to the bottom afterwards
}
loading = false;
startApp = false;
}
J'ai essayé beaucoup des suggestions dans d'autres discussions, mais aucun d'entre eux a effectivement travaillé. J'espère que quelqu'un pourrait aider ici.
Merci beaucoup.