我正在尝试在listView中添加分页。
我在自定义BaseAdapter中添加了一个方法,在滚动到列表中的第一个项目时,会在列表顶部添加下一页结果。
public void addEntriesToTop(List<ChatModel> entries) {
// Add entries to the top of the list
this.chatMessages.addAll(0, entries);
notifyDataSetChanged();
}
因此,如果我必须在ListView上添加下一页,我在我的活动中使用这样的。
//result contain new items to be added to top of list
adapter.addEntriesToTop(result);
//so that list scroll sets to last visible message to user
final int index = result.size();
listView.post(new Runnable() {
@Override
public void run() {
//go to user's last scroll position
messagesContainer.setSelectionFromTop(index, 0);
}
});
此方法工作正常并保留用户的最后滚动位置。但它有一个问题,当我调用addEntriesToTop()时它将ListView滚动到底部(因为notifyDataSetChanged())然后当我调用setSelectionFromTop时它会滚动到用户的最后位置。在这种转变中,有一个小混蛋。
请帮助我顺利过渡。
由于
答案 0 :(得分:1)
由于ListView很老,现在已经过时了,现在您可以使用Recyclerview 而不是ListView,这里的链接可以帮助您转换您的 从ListView到RecyclerView。 RecyclerView有很多添加自定义动画的方法,并且在添加/删除项目时没有任何麻烦。
Replacing ListView with RecyclerView
对于默认动画,您可以使用此链接: