出现的场景,比如我们需要通过分页拉取新的数据,这时候数据集合会变化,此时一个正常的需求就是等数据加载成功后加入到ListView数据集合中,同时需要去把ListView滚动到新数据的最后一行,也就是ListView可视区域的第一行需要显示新数据的最后一行,以此让用户通过向下滚动去显示新数据;
此时如果我们仅仅是调用adapter的notifyDataSetChanged会默认滚动到列表的最顶部,而这样的用户体验是不太友好的,这个时候我们可能会想到要设置顶部选中的条目为指定的索引,即使用mListView.setSelection(index),而这样会有一个明显的从底部滚动到index,如果数据较多这样滚动时界面闪动的厉害。
解决方法如下:
Android listView 提供了在绘制视图时的监听器,可以控制按需去展示最新视图,在滚动到指定索引之前不需输出视图到界面,这样就把问题解决了。
//第一步:通知数据改变
mAdapter.notifyDataSetChanged();
//第二步:设置顶部条目索引
mListView.post(new Runnable()
{
@Override
public void run()
{
mListView.setSelection(index);
}
});
//