您的位置:首页 > 移动开发 > Android开发

Android ListView setSelection()方法的介绍

2015-11-15 20:50 393 查看
一般来讲app中的数据都是以ListView的形式展示的。默认地,把“新”数据添加到数据列表的尾部。

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

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

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

[java] view
plaincopy





@Override  

public void loaded(Long loadTime, int thisPageNumber, boolean isFromZero, boolean isHasMoreToLoad, List data) {  

    refreshComplete();  

    checkIfHasMoreToLoad(isHasMoreToLoad);  

  

    if (thisPageNumber != 1) {// 不是第一页  

        mListView.setSelectionFromTop(5+2, mIMPullToRefreshListView.getHeaderHeight());  

        mIMPullToRefreshListView.getHeaderView().setVisibility(View.GONE);  

    }  

}  

看一下setSelectionFromTop()的具体实现,代码如下:

[java] view
plaincopy





/** 

 * Sets the selected item and positions the selection y pixels from the top edge 

 * of the ListView. (If in touch mode, the item will not be selected but it will 

 * still be positioned appropriately.) 

 * 

 * @param position Index (starting at 0) of the data item to be selected. 

 * @param y The distance from the top edge of the ListView (plus padding) that the 

 *        item will be positioned. 

 */  

public void setSelectionFromTop(int position, int y) {  

    if (mAdapter == null) {  

        return;  

    }  

  

    if (!isInTouchMode()) {  

        position = lookForSelectablePosition(position, true);  

        if (position >= 0) {  

            setNextSelectedPositionInt(position);  

        }  

    } else {  

        mResurrectToPosition = position;  

    }  

  

    if (position >= 0) {  

        mLayoutMode = LAYOUT_SPECIFIC;  

        mSpecificTop = mListPadding.top + y;  

  

        if (mNeedSync) {  

            mSyncPosition = position;  

            mSyncRowId = mAdapter.getItemId(position);  

        }  

  

        requestLayout();  

    }  

}  

从上面的代码可以得知,setSelectionFromTop()的作用是设置ListView选中的位置,同时在Y轴设置一个偏移量(padding值)。

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

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

[java] view
plaincopy





/** 

 * Sets the currently selected item. If in touch mode, the item will not be selected 

 * but it will still be positioned appropriately. If the specified selection position 

 * is less than 0, then the item at position 0 will be selected. 

 * 

 * @param position Index (starting at 0) of the data item to be selected. 

 */  

@Override  

public void setSelection(int position) {  

    setSelectionFromTop(position, 0);  

}  

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

现在应该对setSelection()和setSelectionFromTop()有了更深刻的认识了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: