项目中可能会有这种需求:动态设置ListView显示的itemide
这种需求可能会出如今不一样的状况下,有的是打开页面就要显示在特定的位置,也有的是浏览列表时实时更新数据而且改变了集合中数据,或者是某种条件触发而改变显示的位置,我遇到的就是第二种。post
先说说个人状况:资源
用ListView展现数据,当上拉或下拉刷新时会增长集合中数据的数量,可是考虑若是item太多可能会太占资源,因而我就控制了一下集合的长度,每次刷新后若是size超过最大值时我就会从集合中移除一部分数据,可是当我在刷新adapter时问题就出现了,ListView显示的item直接跳到了顶部或底部,而不是接着刷新以前的位置显示,缘由我没有具体研究,多是由于每次调用adapter的刷新时adapter都记住position,刷新后会继续从记住的position开始展现,但我移除了一部分,从而致使显示的位置错乱。get
其实解决办法很简单,网上有不少人都碰到了这个问题而且给出了解决办法:it
若是上拉或下拉时,从集合中移除了一部分数据,那么在刷新以前调用下面的方法就能够解决问题io
listview.postDelayed(new Runnable() {
@Override
public void run() {List
//上拉时,setSelection(获取当前展现的第一个item的position 减掉你从集合中移除的数据的数量(a)),这样在刷新时就会继续以前的位置显示
listview.setSelection(listview.getFirstVisiblePosition()
- a + 1);
}方法
//下拉时,setSelection(你从集合中移除的数据的数量(a))数据
listview.setSelection(a);
}, 20);项目