ListView的setSelection()和setSelectionFromTop()联系

来源:互联网 发布:linux wget 下载jdk 编辑:程序博客网 时间:2024/05/16 23:41

通常,app中的数据都是以ListView的形式展示的。默认地,把“新”数据添加到数据列表的尾部。

但是,如果是IM类型的app,比如查看历史消息这个模块。新数据并不是插到数据列表的尾部,而是插到数据列表的头部。

要实现比较好的用户体验,需要保持当前的ListView的位置。换句话说,如果我们能够随心所欲地指定ListView滚动的位置,那么这个问题就迎刃而解。

在ListView中,有一个setSelectionFromTop()方法,下面是一个使用范例。代码如下:


  1. @Override  
  2. public void loaded(Long loadTime, int thisPageNumber, boolean isFromZero, boolean isHasMoreToLoad, List data) {  
  3.     refreshComplete();  
  4.     checkIfHasMoreToLoad(isHasMoreToLoad);  
  5.   
  6.     if (thisPageNumber != 1) {// 不是第一页  
  7.         mListView.setSelectionFromTop(5+2, mIMPullToRefreshListView.getHeaderHeight());  
  8.         mIMPullToRefreshListView.getHeaderView().setVisibility(View.GONE);  
  9.     }  
  10. }
从上面的代码可以得知,setSelectionFromTop()的作用是设置ListView选中的位置,同时在Y轴设置一个偏移量(padding值)。

ListView还有一个方法叫setSelection(),传入一个index整型数值,就可以让ListView定位到指定Item的位置。

这两个方法有什么区别呢?看一下setSelection()的具体实现,代码如下:

原来,setSelection()内部就是调用了setSelectionFromTop(),只不过是Y轴的偏移量是0而已。
0 0